web-dev-qa-db-ja.com

フォルダーに作成された最新のファイルとgrepの内容を見つける

特定のフォルダーで最新の作成済みファイルを検索し、パターンの内容をgrepする必要があります。これまでのところ、このコマンドを使用して大丈夫です。

find /var/log/folder -type f -printf '%T+ %p\n' | sort | tail -n1 | xargs grep 'string to find'

これにより、一致する最新のファイルが見つかりますが、stdoutに予期しない行が表示されます。

$ find /var/log/folder -type f -printf '%T+ %p\n' |   sort | tail -n1 | xargs grep 'string to find'
grep: 2016-05-12+20:01:59.0570667340: No such file or directory
/var/log/folder/file:string to find

「そのようなファイルやディレクトリはありません」という行が表示されないようにコマンドを変更するにはどうすればよいですか?

3
user53029

ls -1rt /path/to/files/ | tail -n1は、(変更時間の観点から)ディレクトリ内で最新のファイルを見つけます。これを引数としてgrepに渡します。

grep 'string to find' "$(ls -1rt /path/to/files/ | tail -n1)"
4
DopeGhoti

以下は、空白を含む名前に対して安全なバージョンです。

find /var/log/folder -type f -printf '%T@ %p\0' | sort -rz | sed -Ezn '1s/[^ ]* //p' | xargs --null grep string

使い方:

  • find /var/log/folder -type f -printf '%T@ %p\0'

    これはファイルを検索し、変更時間(秒)に続いてスペースとファイル名にヌル文字を付けて出力します。

  • sort -rz

    これにより、ヌル区切りデータがソートされます。

  • sed -Ezn '1s/[^ ]* //p'

    sed -zはヌル文字で区切られた行を処理し、最新のファイルの名前のみを出力します

  • xargs --null grep string

    これにより、ヌル区切りのファイル名が読み取られ、文字列が読み取られます。

4
John1024