如何为所有目录运行脚本?

如何为所有目录运行脚本?

假设我位于包含 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

相关内容