각 하위 디렉터리에서 명령 집합 실행

각 하위 디렉터리에서 명령 집합 실행

현재 작업 디렉터리의 각 하위 디렉터리 내에서 실행하고 싶은 다음 명령이 있습니다. 명령은 다음과 같습니다.

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

이 디렉토리에는 700개가 넘는 폴더가 있습니다. 각 폴더에 들어가서 네 가지 명령을 실행하고 다음 폴더로 이동하여 명령을 실행하고 반복하기를 원합니다. 이 사이트의 여러 샘플을 내 명령과 결합하려고 시도했지만 제대로 작동하지 않습니다.

답변1

스크립트

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

짧막 한 농담

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

작동 원리

  • Bash는 *현재 디렉터리의 모든 파일과 디렉터리로 확장됩니다.

  • for DIR in *; do ... done이를 거쳐 ...각각에 대해 실행됩니다.

    각각의 경우 $DIR현재 항목의 이름을 보유합니다.

  • [ -d "$DIR" ] && ...$DIR실제로 파일이 아닌 디렉토리인지 확인합니다 .

    그렇다면 ...처형됩니다.

  • cat "$DIR"/*.xml > "$DIR.xml"네 줄의 코드가 수행하는 작업을 정확하게 수행합니다.

관련 정보