awkの出力をmvの入力として使用

awkの出力をmvの入力として使用

私は小さなサイズのすべての画像ファイルを見つけてディレクトリに移動するスクリプト(または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ました。awksystem()

awk '$1<500 && $2<500 {system("mv "$3" /destination")}

mv必要に応じてコマンドを変更してください。ここでは以下を使用しました。

mv /file_(third_field)_from_awk /destination

また、複数の必要はなく、awk上記のように1つだけで十分です。

答え2

ファイル名に改行文字が含まれていないと仮定すると、GNUmvxargsプログラムを使用してこれを実行できます。

 ... | awk ... | xargs -d'\n' mv -t ./small_images

xargs は入力からファイル名を収集してコマンドに追加し、mv -t ./small_images必要に応じて非常に長いコマンドを分割します。コマンドの先頭にターゲットディレクトリを指定したり、それを処理するための小さなスクリプトを作成mvできるバージョンが必要です。-t

関連情報