이 명령줄을 사용하여 폴더 내부의 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