如果该文件夹中存在文件,则递归读取文件夹并对每个文件夹执行命令

时间:2018-05-18 09:17:18

标签: bash shell

我有这个功能完全正常的命令。

for d in ./*/ ; do (cd "$d" && ../Process.sh); done

它遍历所有子文件夹并在每个文件夹中运行Process.sh。

我需要的是,如果文件夹中存在“kill_by_pid”文件,它只会运行Process.sh。除非,如果该特定文件夹中不存在“kill_by_pid”,则跳过该文件夹,它只是移动到下一个文件夹。

3 个答案:

答案 0 :(得分:1)

如何使用findexecdir,例如:

find . -type f -name "kill_by_pid" -execdir ../Process.sh \;

这只会调用文件Process.sh所在的父目录上的kill_by_pid脚本。

答案 1 :(得分:0)

试试这个,

for d in ./*/ ;
  do 
  if [ -f "$d"/kill_by_pid ]; then 
    (cd "$d" && ../Process.sh);
  fi
done

答案 2 :(得分:0)

略有不同的方法:

for f in ./*/kill_by_pid; do
    pushd -- "${f#/*}"
    ../Process.sh
    popd
done

找到每个kill_by_pid文件,然后确定包含它的目录的名称。 (使用pushd / popd只是为了演示 在Process.sh需要在当前shell会话中执行的情况下,更改和恢复不需要子shell的当前目录的方法。)