再帰的にファイルを検索しますが、重複する名前のファイルの中で最大のファイルを選択します。

再帰的にファイルを検索しますが、重複する名前のファイルの中で最大のファイルを選択します。

さまざまなファイルを含む入れ子になったディレクトリ構造が与えられたら、その中にあるすべてのファイルを探したいのですが、同じ名前のファイルが複数ある場合は、最大のファイルだけを返したいと思います。

たとえば、次のようなディレクトリ構造があるとします。

|--- foo.jpg (110 KB)
|--- bar.jpg (210 KB)
|--- dir
      |----- foo.jpg (860 KB)
      |----- baz.jpg (200 KB)

出力ラインを作成したいと思います(順序は重要ではありません)。

bar.jpg
dir/foo.jpg
dir/baz.jpg

可能な限りbashでこれを行うにはどうすればよいですか?

ベストアンサー1

@UlrichSchwarzのコメントを具体化するために、次のように仕上げました。

find . -type f -printf "%s %P %f\n" | sort -k3,3 -k1,1rn | uniq -f 2 | cut -f 2 -d ' '

編集するたとえば、スペースを含むファイル名は処理されません。より強力なソリューションについては、@StéphaneChazelasのソリューションをご覧ください。

おすすめ記事