JPEG 파일의 재귀 변환

JPEG 파일의 재귀 변환

이 명령줄을 사용하여 폴더 내부의 jpeg를 pdf로 변환합니다.

for f in *.jpg; do  echo "Converting $f"; convert "$f" "$(basename "$f" .jpg).pdf"; done

그러나 여러 폴더에 있는 모든 .jpg를 동일한 폴더에 있는 .pdf로 변환하고 싶습니다. "폴더 A로 이동하여 pdf로 변환을 시작한 다음 완료되면 폴더 B로 이동하여 동일한 작업을 수행하십시오"라는 bash 명령이 필요합니다.

JPEG 파일은 .jpg 또는 .JPG로 끝날 수도 있습니다.

내 폴더 구조는 다음과 같습니다.

Folder A
    File1.jpg
    File1.jpg
    File1.jpg
    File1.jpg
    File1.jpg
Folder B
    File1.jpg
    File1.jpg        
    File1.jpg
    ...

이를 달성하는 방법에 대한 아이디어가 있습니까?

답변1

*.jpg업데이트된 질문 에 *.JPG따라 파일 이름을 허용하도록 업데이트되었습니다 . 대소문자를 구분하지 않는 비교 및 ​​패턴을 사용한 변수 확장을
위해 . 이는 실제로 어떤 경우에도 일치합니다 (예: ) .-iname${file%.[jJ][pP][gG]}.jpg.JpG

Folder A및 가 Folder B현재 디렉터리에 있고 모든 디렉터리에서 동일한 작업을 반복적으로 수행하려고 한다고 가정합니다 .

find . -type f -iname \*.jpg | while read -r file
do
    echo "Converting $file"
    convert "$file" " ${file%.[jJ][pP][gG]}.pdf"
done

또는 디렉토리 이름을 지정하려는 경우

find "Folder A" "Folder B" type f -iname \*.jpg | ...

하위 디렉터리의 이름을 지정하지 않은 경우 *.jpg이는 생략할 수 있습니다 -type f.

Folder A하위 디렉토리 등에서 재귀적으로 변환을 수행하지 않으려면 -maxdepth조건을 추가해야 할 수도 있습니다.

답변2

요청하신 내용은 재귀 작업이 아니므로 원본 코드를 간단히 수정하면 처리할 수 있습니다.

for f in */*.jpg */*.JPG; do echo "Converting $f"; convert "$f" "${f%.*}.pdf"; done

이것이 일회용이 아닌 프로덕션 코드용이었다면 jpg파일 JPG이나 PDF가 생성되지 않았을 가능성을 보호할 것입니다. 물론, 만족할 만큼 추가하거나 조정하세요.

for f in */*.jpg */*.JPG
do
    if [[ -f "$f" ]] && [[ ! -f "${f%.*}.pdf" ]]
    then
        echo "Converting $f"
        convert "$f" "${f%.*}.pdf"
    fi
done

관련 정보