私は小さなサイズのすべての画像ファイルを見つけてディレクトリに移動するスクリプト(または1行)を作成しようとしています。に基づいてこの答えはAsk Ubuntuから来ました。、両方のサイズが500未満のファイルのリストを生成できました。一般的な画像ファイルもすべて見つけることができます.jpg
。
find -E . -regex ".*\.(jpg|gif|png|jpeg)" -type f -exec identify -format '%w %h %i\n' '{}' \; | awk '$1<500 && $2<500' | awk '{print $3}'
2番目awk
は、私が望むファイル名だけを印刷することですmv
。 この出力をどのように入れることができますかmv
?
最初の出力の例は次awk
のとおりです。
123 456 ./smallimage.jpg
333 333 ./square.png
2番目はawk
与えられました。
./smallimage.jpg
./square.png
mv
ただし、必要な最終コマンドは次の形式であるため、このファイル名のリストをコマンドへの入力にインポートする方法が見つからないようです。mv <file list> ./small_images/
答え1
次の機能を使用してマージされmv
ました。awk
system()
awk '$1<500 && $2<500 {system("mv "$3" /destination")}
mv
必要に応じてコマンドを変更してください。ここでは以下を使用しました。
mv /file_(third_field)_from_awk /destination
また、複数の必要はなく、awk
上記のように1つだけで十分です。
答え2
ファイル名に改行文字が含まれていないと仮定すると、GNUmv
とxargs
プログラムを使用してこれを実行できます。
... | awk ... | xargs -d'\n' mv -t ./small_images
xargs は入力からファイル名を収集してコマンドに追加し、mv -t ./small_images
必要に応じて非常に長いコマンドを分割します。コマンドの先頭にターゲットディレクトリを指定したり、それを処理するための小さなスクリプトを作成mv
できるバージョンが必要です。-t