我有这个功能完全正常的命令。
for d in ./*/ ; do (cd "$d" && ../Process.sh); done
它遍历所有子文件夹并在每个文件夹中运行Process.sh。
我需要的是,如果文件夹中存在“kill_by_pid”文件,它只会运行Process.sh
。除非,如果该特定文件夹中不存在“kill_by_pid”,则跳过该文件夹,它只是移动到下一个文件夹。
答案 0 :(得分:1)
如何使用find
和execdir
,例如:
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的当前目录的方法。)