コンテンツとファイル名に基づいて特定のファイルを検索するには、次の方法を使用します。
find /labels/ -type f -iname '*.*' -exec grep -l 'MB2306' {} +
これで、返されたファイルの作成日も知っておく必要があります。これを達成するには、ここで何を変更する必要がありますか?
Red Hat Enterprise 8.8の4.6.0で動作しています。
答え1
-files0-from
GNUfind
および最新バージョンの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
(%y
for stat
)は最後の修正時刻で、作成時刻とも呼ばれます。コンテンツこれらのファイル。ファイルの作成時間を%B
(%w
GNUの場合)に変更することはできますが、これはすべてのシステムとファイルシステムで利用できるわけではありません。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()
仕様(ここではナノ秒に拡張)またはそれに対応する%N
GNU仕様は、難読化されていない標準形式を提供します。必要に応じて調整できます。参照形式の詳細については、こちらをご覧ください。find
-printf
%TFT%TT%Tz
2023-06-14T10:23:05.047789132+0100
man strftime
GNUstat
形式はカスタマイズできませんが、forとforを2023-06-14 10:23:05.047789132 +0100
使用することもできます。%Y
1686734585
%.Y
1686734585.047789132
¹これはファイルの内容と解釈方法LC_ALL=C
にも影響しますが、grep
ここで固定文字列を見つけるときに違いはありません。
答え2
これらのfind
コマンドはAND
すべて予測されるので(predicatesを使用しない限り-o
)追加してls -l --time=creation
(OSがそれをサポートしなければならず、Alma 9.1で確認しました)、一致するファイルの作成時間のリストを取得できます。
find /labels/ -type f -iname '*.*' -exec grep -q 'MB2306' {} \; -exec ls -l --time=creation {} \;`
ファイルが一致するかどうかを知る必要があるため、grep
に変更しました。一致した場合は実行し、一致しない場合は実行しないでください。-q
ls
ls