私の写真のコレクションをテレビに見せたいです。これを行うには、1920 x 1080 pxウィンドウに合わせて写真のサイズを変更する必要があります(原稿を処理するときのパフォーマンスが悪いため)。
私の予想構造は次のとおりです。
/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