모든 디렉토리에 대해 스크립트를 실행하는 방법은 무엇입니까?

모든 디렉토리에 대해 스크립트를 실행하는 방법은 무엇입니까?

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

관련 정보