내가 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