最新ファイルのGrep


2

サブフォルダーにある最新のファイルから特定の行を見つけようとしています。ファイルには同じ名前が付いています。したがって、構造は次のようになります。

  • フォルダ
    • サブフォルダー1
      • filename.xml
    • SubFolder2
      • filename.xml

私はgrepを使用して行を持っています

grep -r "mySubString" folder/

ここで提案されているように、ファイルをソートするためにfindを使用してみまし。しかし、私は両方を組み合わせて最新のファイルから行を取得する方法を知りません。

ご協力いただきありがとうございます。


grep何も見つからない場合でも最新のファイルで実行するかgrep、一致するものが見つかった最新のファイルからの出力が必要かは明確ではありません。
AFH 14年

コメントありがとうございます。最新のファイルでgrepを実行したい。
マリオレブレロ14年

その場合、@ ap0は以下の最も近い答えを与えますが、文字列がどのファイルから来たかを知りたい場合は修正が必要です。
AFH 14年

回答:


1
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "

これにより、このコマンドを実行しているディレクトリとすべてのサブディレクトリから作成された最新のファイルが返されます。必要に応じ.て、ディレクトリパスを探す特定のディレクトリを検索します。

このファイルの内容をgrepするには:

cat `find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "` | grep "mySubString"

編集:わかりません。私はこれをすぐに試しましたが、うまくいきました。テストファイルを作成し、このコマンドを使用しました。それは私のために働いた。問題がある場合はお知らせください。


1

zsh:

grep pattern **/*(.om[1])

om変更日で.並べ替え、通常のファイルの修飾子です。

GNU find

grep pattern "$(find -type f -printf '%T@ %p\n'|sort -n|tail -n1|cut -d' ' -f2-)"

%T@変更時刻で%pあり、パス名です。

BSD:

grep pattern "$(find . -type f -exec stat -f '%m %N' {} +|sort -n|tail -n1|cut -d' ' -f2-)"

%m変更時刻で%Nあり、パス名です。

bash 4:

shopt -s globstar;grep pattern "$(ls -dt **|head -n1)"

これにはディレクトリが含まれ、引数リストが長すぎるエラーになる可能性があります。


これも正しいです。評判が悪いため、賛成できません。
マリオレヴレロ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.