it-swarm-ja.com

最新ファイルのGrep

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

  • フォルダ
    • SubFolder1
      • filename.xml
    • SubFolder2
      • filename.xml

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

grep -r "mySubString" folder/

Findを使用して、提案どおりにファイルを並べ替えてみました ここ 。しかし、両方を組み合わせて最新のファイルから1行だけを取得する方法がわかりません。

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

2
Mario Levrero
find . -type f -printf '%[email protected] %p\n' | sort -n | tail -1 | cut -f2- -d" "

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

このファイルのコンテンツをgrepするには:

cat `find . -type f -printf '%[email protected] %p\n' | sort -n | tail -1 | cut -f2- -d" "` | grep "mySubString"

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

1
ap0

zsh:

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

om変更日別の注文と.は通常のファイルの修飾子です。

GNU find

grep pattern "$(find -type f -printf '%[email protected] %p\n'|sort -n|tail -n1|cut -d' ' -f2-)"

%[email protected]は変更時間であり、%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)"

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

1
Lri