首页 > 解决方案 > 执行子文件夹内的代码

问题描述

我在文件夹(数据)中有子文件夹(data1,data2,data3),python(.py)程序存在于所有同名的子文件夹中。我想在每个文件夹中运行这些 python 程序。

Data
    data1/a.py
    data1/b.py
    data1/c.py
    
    data2/a.py
    data2/b.py
    data2/c.py
    
    data3/a.py
    data3/b.py
    data3/c.py

我尝试了下面的代码:

 for dir in Data/*
 do
 cd $dir
 python *.py
 done

但它不执行子文件夹内的代码,任何人都可以提出适当的解决方案。

标签: pythonbashshellfor-loop

解决方案


不要使用循环执行此操作。假设你想运行所有的 python 脚本Data/,并且你希望这些脚本在当前工作目录中执行,等于找到脚本的目录,使用:

find Data -name '*.py' -execdir ./{} \;

如果您不想执行所有脚本,请find适当过滤。

例如,如果您只想运行脚本 name a.pyb.pyc.py,您可以使用:

find Data -name '[abc].py' -execdir ./{} \;

如果您的目录命名不佳,您可能还希望使用-type f来避免尝试执行名为a.py. 例如find Data -type f -name '[abc].py' -execdir ./{} \;

您可以通过指定目录来简单地限制范围:或find Data/data1 Data/data3 ...按预期工作。find Data/data[12] ...find Data/data[13] ...


推荐阅读