假设我位于包含 script.sh 和子目录的主目录,每个子目录都包含图像。
script.sh是用于调整图像大小的脚本。我想将此脚本应用于每个子目录,因此在搜索解决方案后,我创建了另一个脚本,即
SAVEIFS=$IFS #Since the subdirectories contain whitespaces in their name
IFS=$(echo -en "\n\b")
for d in ./*; do
if [ -d "$d" ]; then
echo "$d" && cp ./script.sh ./$d/script.sh && cd "$d" && exec sh ./script.sh && cd ..
fi
done
IFS=$SAVEIFS
问题是该脚本在第一个子目录完成后停止。我怎样才能让它在所有子目录下运行?或者是否有更好的方法使 script.sh 对所有子目录运行?
答案1
find
来救援!
CURDIR=`pwd`
IFS=$'\n'
for d in $(find . -type d);
do
cd $CURDIR/"$d"
$CURDIR/script.sh
done
更好的是......从脚本中删除“目录中的所有文件”内容,并且:
IFS=$'\n'
for f in $(find . -type f);
do
./script.sh "$f"
done