다양한 대상에 대한 반복적인 썸네일 생성

다양한 대상에 대한 반복적인 썸네일 생성

내 사진 컬렉션을 TV에 보여주고 싶습니다. 이렇게 하려면 1920x1080px 창에 맞게 사진 크기를 조정해야 합니다(원본을 처리할 때 성능이 형편없기 때문입니다).

내 예상 구조는 다음과 같습니다

/path/to/originalphotos/
/path/to/originalphotos/2016/2016-01-01 Description/DSC_1234.JPG
/path/to/originalphotos/2019/2019-12-31 Description/DSC_5678.JPG

/path/to/thumbnails/
/path/to/thumbnails/2016/2016-01-01 Description/DSC_1234_thumb.JPG
/path/to/thumbnails/2019/2019-12-31 Description/DSC_5678_thumb.JPG

/path/to/originalphotos/Imagemagick의 유틸리티를 사용하여 해당 하위 디렉터리에 있는 각 파일의 축소판을 반복하고 생성하는 스크립트를 생성하려고 합니다 convert..JPG

지금까지 내 Bash 스크립트는 다음과 같습니다.

#!/bin/bash
SOURCE_PATH="/path/to/originalphotos/"
DESTINATION_PATH="/path/to/thumbnails/"
find "$SOURCE_PATH" -type f -iname '*.jpg' -exec sh -c 'echo convert \"$1\" -auto-orient -resize 1920x1080\> --write \"$DESTINATION_PATH${0%}_thumb.JPG\"' -- {} \;

echo데이터 저장을 피하기 위해 이것을 추가했습니다 .

썸네일을 올바르게 저장하는 데 도움을 주실 수 있나요?

내 폴더 이름 중 일부에 덴마크 특수 문자(Æ, Ø, Å)가 포함되어 있기 때문에 나중에 문제가 발생할 것 같은 느낌이 듭니다.

답변1

폴더 이름이 전혀 문제가 될 것이라고 생각하지 않습니다. 하지만 find구문을 더 간단하게 만들기 위해 쉘 글로빙을 대신 사용하는 것이 좋습니다 . 이 같은:

shopt -s globstar nullglob 
destination=/path/to/thumbnails
cd /path/to/originalphotos
for i in **/*{jpg,JPG}; do 
    dirName=${i%/*}
    file=$(basename "$i")
    fileName="${file%.*}"
    echo convert "$i" -auto-orient -resize 1920x1080\> \
        --write "$destination/${fileName}_thumb.JPG" 
done

jpg그러면 파일 이 처리되지만 모든 엄지 손가락은 처음 인지 여부에 관계없이 종료 JPG됩니다 . 이것이 문제라면 다음과 같이 할 수 있습니다..JPG.jpg.JPG

for i in **/*{jpg,JPG}; do 
    dirName=${i%/*} 
    file=$(basename "$i")
    fileName="${file%.*}" 
    ext="${file##*.}" 
    echo convert "$i" -auto-orient -resize 1920x1080\> \
        --write "$destination/${fileName}_thumb.$ext"
done

관련 정보