
현재 작업 디렉터리의 각 하위 디렉터리 내에서 실행하고 싶은 다음 명령이 있습니다. 명령은 다음과 같습니다.
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"
네 줄의 코드가 수행하는 작업을 정확하게 수행합니다.