![宛先にサブディレクトリがない場合、`convert` コマンドで問題が発生します](https://rvso.com/image/747352/%E5%AE%9B%E5%85%88%E3%81%AB%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%80%81%60convert%60%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99.png)
サブディレクトリとその他の画像がいっぱい入ったというディレクトリがあります。 1 つの bash ステートメントを使用して、次のようにsrc
、それらすべてを別の宛先ディレクトリに自動的にサイズ変更しようとしました。thumb
find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;
thumb
ディレクトリは最初は空であり、 と同じディレクトリ構造ではないため、これは機能しませんでしたsrc
。
を調べようとしましたman convert
が、 でディレクトリを自動的に作成するオプションが見つからないようですconvert
。 ディレクトリ内のすべての画像をサムネイル サイズに変換する効果的な方法は何ですかthumb
? サムネイル内のすべてのサブディレクトリを事前に作成する必要がありますか?
編集
上記のコマンドの前に以下を追加しました:
find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;
しかし、2 つのコマンドではなく 1 つのコマンドですべてを実行できるかどうかが気になります。
答え1
UNIXの哲学は、1つのことだけを行うコマンドを持つことです。標準出力すでにこのルールを拡大解釈しています。
すべてを 1 つのコマンドで実行できるかどうかは、定義によって異なります。これは次のようになります:
find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;
1つのコマンドとしてカウントするか、複数のコマンドとしてカウントするか: find
、、、、、? 改行はsh
mkdir
dirname
convert
「読みやすさ」。