使用Shell在多个子目录中运行可执行程序文件

时间:2014-06-08 17:20:57

标签: linux bash shell terminal command

我有一个包含361个子目录的主目录。在每个子目录中,有一个参数文件和一个可执行程序文件。编译可执行文件以在可执行文件所在的目录中查找参数文件。 (所有子目录中都有相同的可执行文件。参数文件在所有子目录中都具有相同的文件名)

没有单独执行程序文件,是否有一个cshell命令让终端一次性运行它们?

2 个答案:

答案 0 :(得分:3)

<强>已更新

如果您的Linux已经老了,它没有-execdir,您可以试试这个:

find $(pwd) -name YourProgram -exec dirname {} \; | while read d; do cd "$d" && pwd; done

如果这正确地打印了您的程序需要运行的目录的名称,只需删除pwd并替换您想要在目录中执行的任何操作 - 大概是这样的:

find $(pwd) -name YourProgram -exec dirname {} \; | while read d; do cd "$d" && ./YourPrgram; done

原始回答

喜欢这样:

find . -type f -name YourProgramName -execdir ./YourProgramName YourParameterFile \;

但首先备份并在使用之前检查它。

-execdir导致find在运行命令之前更改为找到的目录。

如果你的命令更复杂,你可以这样做:

 find . -type f -name YourProgramName -execdir sh -c "command1; command2; command3" \;

检查它是否符合您的要求:

 find . -type f -name YourProgramName -execdir pwd \;

答案 1 :(得分:0)

也许这会有所帮助。假设您在每个文件夹中都有一个名为params_file的文件和一个名为exec_file的可执行文件,那么:

for dir in `find . -maxdepth 1 -mindepth 1 -type d` ; do 
    cd $dir
    cat params_file | xargs ./exec_file
    cd ..
done