GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで特定のサイズの画像のみを一括コピーする方法

見よ、興味深い問題-または必要に応じて要件。たとえば、数十または数百の画像でいっぱいのフォルダがあります。また、高さは480、600、1024ピクセル、幅は200、320、9000ピクセルなど、さまざまなサイズがあり、このフォルダから別の場所に高品質で大きなサイズの画像のみをコピーしたいとします。 。これを手動で行うのは面倒な作業になる可能性があります。

この記事では、ターミナルウィンドウで実行できる比較的簡単なコマンドを紹介します。このコマンドを使用すると、画像をサイズでフィルターで除外し、必要な属性を持つ画像のみをコピーできます。さて、これを達成する方法はたくさんあり、私のソリューションは(考えられるすべてのユースケースに対して)ユニークでも包括的でもありませんが、うまくいくはずです。始めましょう。

取引のツール

さまざまなデフォルトのLinuxコマンドラインツールに加えて、必要な唯一のアプリケーションは、画像処理ユーティリティのバンドル/スイートであるImageMagickです。ほとんどのディストリビューションにそのままインストールされるため、ほとんどのシナリオで何もする必要はありません。

ワンライナー

さて、あなたが必要とするコマンドはこれです:

ls * .FFF | xargs -I{}識別-format'%i%w%h \ n'{} | grep -w XXX | awk'{print $ 1}' | grep -v ^ $ | xargs -I cp{}"宛先フォルダー"

ここには何がありますか?

さまざまなアクションの内訳は次のとおりです。

  • 最初に、現在のフォルダーにあるFFF拡張子(* .FFF)のすべてのファイルを一覧表示します。もちろん、これを任意のディレクトリに変更したり、findコマンドなどのより高度な方法を使用してファイルを検索/検索したりできます。
  • 次に、文字列置換でxargsを使用し、名前をImageMagickスイートのidentifyユーティリティにパイプします。このユーティリティは、各ファイル名を処理し、属性を「%i%w%h \ n」の形式で出力します。これは、次のことを意味します。ファイル名、幅、高さ、改行文字なので、エントリごとに出力を分離します。ここでは、表現の自由があります。検索できるのは、幅、高さ、またはその他のプロパティのみです。
  • 次に、幅(640)などの特定のサイズに一致するwholeword(-w)エントリをgrepします。必要に応じて、egrepを使用して複数の値をキャッチしたり、正規表現を使用したりすることもできます。
  • 次に、上記のgrep修飾子に一致するファイルのファイル名のみを出力します。コマンドの出力は実際には次のようにファイル名幅高さ改行文字であるため、実際にはawkを使用して最初の値を出力します。

file1.jpg 640 480
file2.jpg 320200

  • 次に、空の行を除外します。私のテストでは、識別によって空の行が出力されることがあるため、結果にそれらを含めたくありません。
  • 次に、ファイル名をもう一度xargsに渡し、それらを宛先フォルダーにコピーします。宛先フォルダーは存在している必要があります。 -Iオプション(非推奨の-iオプションも使用できます)を使用して、ファイル名が正しく解析されるようにします。そうでない場合は、次のエラーが発生する可能性があります。

cp:ターゲット'./file.jpg'はディレクトリではありません

2ライナー

上記はうまくいくはずですが、ツールがファイル名、空の行、改行文字を解析する方法の微妙な違いが原因で問題が発生した場合は、1行を2行に簡略化して、最初に結果をに書き込むことができます。テキストファイルを作成し、テキストファイルを解析してコピーします:

ls * .FFF | xargs -I{}識別-format'%i%w%h \ n'{} | grep -w XXX | awk'{print $ 1}' | tee list.txt

cat list.txt | grep -v ^ $ | xargs -I cp{}"宛先フォルダー"

たとえば、いずれかのサイズを800ピクセルに設定してすべてのPNG画像をコピーします。

ls * .png | xargs -I{}識別-format'%i%w%h \ n'{} | grep -w 800 | awk'{print $ 1}' | tee list.txt

cat list.txt | grep -v ^ $ | xargs -I cp {} ./dir-only-big-files

結論

三。さて、私が書いたものよりもおそらくもっとエレガントに、同じことを達成するための十数の異なる方法と微調整を提案できると確信しています。もしそうなら、あなたの提案を私にメールしてください、そして私はそれらをこのチュートリアルに追加するかもしれません。この記事の目的は、スクリプト学の聖杯ではなく、一般的なニーズに対応する簡単なソリューションです。そして、それはうまく機能します。

とにかく、さまざまなサイズや属性の画像、写真、スクリーンショットなどがたくさんある場合は、Linuxコマンドラインを使用して巧妙な方法でそれらを除外し、さらにImageMagickidentifyコマンドを使用できます。サイズやカラーマッピングなどについても話し合っています。うるさい。うまくいけば、これはかなり便利です。気をつけて。


Linux
  1. Linuxで特定のサイズのファイルを作成する方法

  2. Linuxコンテナレジストリを管理する方法

  3. AmazonLinuxにImageMagickをインストールする方法

  1. Linuxの「cat」コマンドを使用して、特定の行のみを番号で表示するにはどうすればよいですか。

  2. Linuxで特定のサイズのファイルを作成するには?

  3. Linuxのソケットバッファサイズを見つける方法

  1. Linuxで特定のサイズのファイルをコピーから除外する方法

  2. 特定の列サイズでテキストを折り返す方法は?

  3. UbuntuLinuxでスワップサイズを増やす方法