特定の日付のファイルから特定の文字列を取得する方法は?
たとえば、次の3つのファイルがあります。
'a1' dated: 20 Feb,
'a2' dated 21 Feb,
'a3' dated 22 Feb.
「JMS111」などの特定の文字列の日付=「2月21日」のすべてのファイルを検索したいと思います。
私は成功せず、次のコマンドを試しました。
ls -lt |grep 'JMS111' -ctime 2019/02/21
find -name '*.xml' -type f -printf '%Tw:%h/%f\0' | grep 'JMS111'
ベストアンサー1
この問題を解決する1つの方法は、探している日付を角括弧で指定するようにタイムスタンプファイルを設定することです。
touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time
...その後、find
開始時刻より新しいファイルを要求しますが、いいえ終了時間以降:
find . -type f -newer /tmp/start-time ! -newer /tmp/end-time
一緒に入れてください:
touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time
find . -type f -newer /tmp/start-time ! -newer /tmp/end-time -name '*.xml' -exec grep JMS111 /dev/null {} +
rm /tmp/start-time /tmp/end-time
その後、名前が正しい時間範囲で終わるファイルを見つけて、.xml
そのファイル名をgrep
一度にできるだけ多く渡します。/dev/null
grepが検索する「ファイル」をファイル名find
(存在する場合)と一緒に追加しました。これにより、一致するファイルが1つしかない場合は、一致するgrep
ファイル名が報告されるように強制されます(/dev/nullは一致しないため報告されないため)。
出力はファイル名とこれらのファイルの一致する行になります。