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