Grep dalam file terbaru

2

Saya mencoba menemukan baris tertentu dari file terbaru yang saya miliki di subfolder. File memiliki nama yang sama. Jadi strukturnya seperti:

  • Map
    • SubFolder1
      • filename.xml
    • SubFolder2
      • filename.xml

Saya menggunakan grep untuk memiliki garis

grep -r "mySubString" folder/

Saya sudah mencoba menggunakan find untuk mengurutkan file seperti yang diusulkan sini . Tapi saya tidak tahu bagaimana menggabungkan keduanya untuk mendapatkan baris dari file terbaru.

Terima kasih atas bantuan Anda.

Mario Levrero
sumber
tidak jelas apakah Anda ingin menjalankan grep pada file terbaru, bahkan jika tidak menemukan apa pun, atau apakah Anda ingin output dari file terbaru di mana grep menemukan kecocokan.
AFH
Terima kasih AFH atas komentar Anda. Saya ingin menjalankan grep di file terbaru.
Mario Levrero
Dalam hal ini @ ap0 memberikan jawaban paling rapi di bawah ini, tetapi perlu modifikasi jika Anda ingin tahu dari file mana string itu berasal.
AFH

Jawaban:

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

Ini akan mengembalikan file terbaru yang dibuat dari direktori tempat Anda menjalankan perintah ini dan semua sub direktori. Jika Anda ingin mencari di direktori direktori tertentu . ke jalur direktori.

untuk menerima konten file ini:

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

Sunting: Saya tidak yakin. Saya mencoba ini sendiri dengan cepat dan itu berhasil. Saya membuat file uji dan menggunakan perintah ini. Itu berhasil untuk saya. Jika ada masalah, beri tahu saya.

ap0
sumber
1

zsh:

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

om pesanan berdasarkan tanggal modifikasi dan . adalah kualifikasi untuk file biasa.

GNU find:

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

%T@ adalah waktu modifikasi dan %p adalah pathname.

BSD:

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

%m adalah waktu modifikasi dan %N adalah pathname.

pesta 4:

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

Ini termasuk direktori dan dapat menyebabkan daftar argumen kesalahan terlalu lama.

Lri
sumber
Ini juga benar, saya tidak dapat memilih karena reputasi saya yang rendah.
Mario Levrero