さまざまなターゲットの繰り返しサムネイルを作成する

さまざまなターゲットの繰り返しサムネイルを作成する

私の写真のコレクションをテレビに見せたいです。これを行うには、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

関連情報