我有一个包含361个子目录的主目录。在每个子目录中,有一个参数文件和一个可执行程序文件。编译可执行文件以在可执行文件所在的目录中查找参数文件。 (所有子目录中都有相同的可执行文件。参数文件在所有子目录中都具有相同的文件名)
没有单独执行程序文件,是否有一个cshell命令让终端一次性运行它们?
答案 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