サイズと拡張子の制限より小さいファイルを見つける方法

サイズと拡張子の制限より小さいファイルを見つける方法

サブディレクトリから拡張子を持つすべてのファイルを再帰的にgrepしたいが、csv4M未満のサイズのファイルのみを選択します。これは正しいことですか?

find . -type f -size -4M | grep --include \*.csv 'pattern'

このコマンドは、.csvデフォルトでは4M未満のサイズに制限なくすべてのファイルを選択しますが、find個別には4M未満のすべてのファイルを正しく検索します。

ベストアンサー1

まず、偽データを設定します。

$ for fileno in {1..4}; do for line in {1..100000}; do printf "%d,%d,%d,%d,%d,%d,%d,%d\n" $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM; done > ~/tmp/big-fake-${fileno}.csv; done
$ for fileno in {1..4}; do for line in {1..50000}; do printf "%d,%d,%d,%d,%d,%d,%d,%d\n" $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM; done > ~/tmp/small-fake-$fileno.csv; done

興味のある属性があるかどうかを確認しましょう。

$ du -b tmp/*.csv
4528666 tmp/big-fake-1.csv
4529227 tmp/big-fake-2.csv
4529173 tmp/big-fake-3.csv
4528782 tmp/big-fake-4.csv
2263714 tmp/small-fake-1.csv
2264028 tmp/small-fake-2.csv
2264398 tmp/small-fake-3.csv
2265134 tmp/small-fake-4.csv

さて、小さなファイルでいくつかのパターンを見つけましょう。

$ find tmp/ -type f -iregex ".*\.csv" -size -4M -exec grep '1,1,1' {} +
tmp/small-fake-3.csv:15361,2526,13438,1083,3224,13221,1,19248

もちろん、grepここでは他のフラグも可能です。たとえば、-l目的のパターンを含むファイル名にのみ興味がある場合です。

これは、「括弧の代わりに{} +見つかったファイル名のリストを挿入する」のテンプレートと考えることができます。findGrepは一度に1つずつファイル名のリストを取得することを好むので、-exec grep '1,1,1' {} \;一度に各個々のファイルに対して新しいGrapインスタンスを起動するよりも優れています。

私の考えでは、このロゴは他のタイプのロゴ-execと同様にGNU-ismだと思います。 (誰かがこれについて詳しく説明するコメントを投稿すると確信しています。)findfind -print0 | xargs -0

おすすめ記事