grep 以降のファイル名とファイル生成日を返します。

grep 以降のファイル名とファイル生成日を返します。

コンテンツとファイル名に基づいて特定のファイルを検索するには、次の方法を使用します。

find /labels/ -type f -iname '*.*' -exec grep -l 'MB2306' {} +

これで、返されたファイルの作成日も知っておく必要があります。これを達成するには、ここで何を変更する必要がありますか?

Red Hat Enterprise 8.8の4.6.0で動作しています。

ベストアンサー1

-files0-fromGNUfindおよび最新バージョンのGNU(4.9以降)grepまたは互換バージョンを使用してください。

find /labels/ -type f -name '*.*' -exec grep -Zl MB2306 {} + |
  find -files0-from - -prune -printf '%TFT%TT%Tz %p\n'

他のfind実装またはGNU以前のバージョンの場合find、そしてまだGNUxargsとGNUをstat使用できる場合:

find /labels/ -type f -name '*.*' -exec grep -Zl MB2306 {} + |
  xargs -r0 stat -c '%y %n' --

%T%yfor stat)は最後の修正時刻で、作成時刻とも呼ばれます。コンテンツこれらのファイル。ファイルの作成時間を%B%wGNUの場合)に変更することはできますが、これはすべてのシステムとファイルシステムで利用できるわけではありません。stat

-name '*.*'-inameパターンに文字がないためあまり意味がありません)レポート名は完全にテキストで構成され、1つ以上が含まれていることに注意してください..bashrcファイル名がテキストで構成されているかどうかに関係なく、拡張子を持つファイルを一致させるにはLC_ALL=C find ... -name '?*.*'¹が必要です。名前に関係なくファイルが必要な場合は、以下を省略してください-name pattern

findほとんどの機能は、ファイルタイプ別の再帰およびフィルタリングをサポートするzshシェルのglobで利用でき、そのシェルで次のことができるようにstat組み込まれています(1997年からGNU以前)。stat

zmodload zsh/stat
stat -nLF %FT%T.%N%z +mtime ${(0)"$(
  grep -lZ MB2306 /labels/**/?*.*(ND.))"}

(まだGNUgrepまたはその-Zオプションと互換性があると仮定し、ここではプレーンテキストファイル名に限定されません。)

この%FT%T.%N%z strftime()仕様(ここではナノ秒に拡張)またはそれに対応する%NGNU仕様は、難読化されていない標準形式を提供します。必要に応じて調整できます。参照形式の詳細については、こちらをご覧ください。find-printf%TFT%TT%Tz2023-06-14T10:23:05.047789132+0100man strftime

GNUstat形式はカスタマイズできませんが、forとforを2023-06-14 10:23:05.047789132 +0100使用することもできます。%Y1686734585%.Y1686734585.047789132


¹これはファイルの内容と解釈方法LC_ALL=Cにも影響しますが、grepここで固定文字列を見つけるときに違いはありません。

おすすめ記事