find コマンドは、サブディレクトリを計算せず、特定の文字列を含むディレクトリにファイルがいくつあるかを計算します。

find コマンドは、サブディレクトリを計算せず、特定の文字列を含むディレクトリにファイルがいくつあるかを計算します。

次のコマンドを書いています。

find . -mtime -1 -type f -exec grep -ln '20191122' {} \; | wc -l

これにより、「20191122」という文字列を含む日中に変更されたすべてのファイルを検索し、最後に説明に一致するファイル数を出力できます。

しかし、私が属しているディレクトリには、日中も更新されるサブディレクトリがあり、そのディレクトリも含まれますwc -l

私はそれを使用すると、ディレクトリではなく-type f「ファイル」だけを計算すると思いました。

誰でもエラーやヘルプを見ることができますか?

ありがとうございます。

ベストアンサー1

はい、find ... -type fファイルのみを検索しますが、再帰的に検索します。入力するサブディレクトリ。

grep現在のディレクトリのファイルにのみ適用するには、-maxdepth 1GNUfindコマンドで使用することもできます。これにより、2つ以上のレベルに下がることを防ぐことができますfind(つまり、現在のディレクトリのみ)。

findユーティリティが実装されていないUnixで同じことをしたい場合は、次の-maxdepthことを検討してください。

find . ! -name . -prune -mtime -1 -type f -exec grep -ln '20191122' {} \;

.これにより、使用が中断されるのを防ぐことができます-prune

grepファイル数を計算する場合は、ファイルのパターンを検出してwc -l正しく計算できる内容を出力する方が安全です。ファイル名に改行文字が含まれていると、wc -l誤って計算されます。

たとえば、

find . ! -name . -prune -mtime -1 -type f -exec grep -q '20191122' {} \; -exec echo x \; | wc -l

xこれにより、その文字列を含む各ファイルに対して1行の文字が出力され、その行wc -lの数が計算されます。

おすすめ記事