我已经在 abcd 开头的所有目录中执行for loop
并且它正在运行。但是当我在根目录中有其他文件或东西时,它会在第一次循环后崩溃。
dir_1="./some/path1"
dir_2="./some/path2"
dir_3="./some/path3"
for f in ./abcd*;
do
[ -d $f ] && cd "$f" && echo I am inside $f
find $dir_1 -name something*.txt -exec cp {} $dir_3 \;
find $dir_2 -name another*.txt -exec cp {} $dir_3 \;
cd "$dir_3"
# do some other stuff here
cd ../../..
done;
有人可以帮我修理吗?
答案 0 :(得分:3)
可以将glob本身限制为目录,此时如果cd
失败,您可以直接跳到下一次迭代。
for f in ./abcd*/;
do
pushd "$f" || continue
find "$dir_1" -name something*.txt -exec cp {} "$dir_3" \;
find "$dir_2" -name another*.txt -exec cp {} "$dir_3" \;
pushd "$dir_3"
# do some other stuff here
popd
popd
done
pushd
和popd
会更改目录并更改回原点。 (由于您不能在两个popd
之间执行任何操作,因此可以使用简单的pushd
替换第二个cd
并删除相应的popd
。)< / p>