次のコマンドを書いています。
find . -mtime -1 -type f -exec grep -ln '20191122' {} \; | wc -l
これにより、「20191122」という文字列を含む日中に変更されたすべてのファイルを検索し、最後に説明に一致するファイル数を出力できます。
しかし、私が属しているディレクトリには、日中も更新されるサブディレクトリがあり、そのディレクトリも含まれますwc -l
。
私はそれを使用すると、ディレクトリではなく-type f
「ファイル」だけを計算すると思いました。
誰でもエラーやヘルプを見ることができますか?
ありがとうございます。
答え1
はい、find ... -type f
ファイルのみを検索しますが、再帰的に検索します。入力するサブディレクトリ。
grep
現在のディレクトリのファイルにのみ適用するには、-maxdepth 1
GNUfind
コマンドで使用することもできます。これにより、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
の数が計算されます。