すべてのディレクトリに対してスクリプトを実行するには?

すべてのディレクトリに対してスクリプトを実行するには?

私は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

おすすめ記事