하위 디렉터리에 있는 모든 파일의 압축을 풀고 원래 디렉터리 이름을 따서 이름을 바꿉니다.

하위 디렉터리에 있는 모든 파일의 압축을 풀고 원래 디렉터리 이름을 따서 이름을 바꿉니다.

나는 이상한 상황에 빠졌습니다. 35개의 폴더가 있습니다. 첫 번째 이름은 1, 두 번째 이름은 2 등으로 지정됩니다. 각 폴더에는 4개의 파일이 있습니다. '1.png', '2.png', '3.png', '4.png'. 이러한 각 폴더에서 "convert *.png -append out.pdf"를 실행하고 원래 디렉터리 다음에 각 'out.pdf'의 이름을 바꾸고(예: 첫 번째 폴더의 'out1.pdf') 각 압축을 풀고 싶습니다. pdf 원본 폴더에서. 이것이 가능한가? 루프를 시도했지만 시도한 모든 것이 명명 시스템에 동의하지 않는 것 같습니다.

답변1

다음과 같이 시도해 보세요.

#!/bin/sh

for dir in $(seq 1 35)
do
    (
         cd $dir || exit 1
         rm -f out$dir.pdf
         for n in 1 2 3 4
         do
             convert $n.png -append out$dir.pdf  || exit 2
         done
    )
done

bash이 스크립트는 posix와 호환되며 가 필요하지 않으므로 #!/bin/sh.

괄호 사이의 코드는 하위 쉘에서 실행되므로 cd명령은 닫는 괄호까지만 디렉터리를 변경합니다. 루프의 다음 반복은 원래 작업 디렉터리에서 시작됩니다.

귀하의 예에서는 구문이 convert잘못된 것 같습니다. Convert는 하나의 입력 파일만 사용하며 원래 질문에서는 *.png4개의 입력 파일을 전달합니다. 아마도 그것은 당신의 문제의 일부일 것입니다.

관련 정보