Saya mencari file di direktori home saya yang dimodifikasi dalam dua menit terakhir yang juga berisi string tertentu. Saya mencoba dengan perintah ini:
find -type d -mmin -2 -ls | grep -Ril "mystring"
Tampaknya berfungsi tetapi ternyata hanya mencetak file-file dengan string yang diberikan di dalamnya daripada file yang terakhir dimodifikasi 2 menit yang lalu yang berisi string. Sepertinya bagian pertama dari perintah tidak dijalankan.
Jawaban yang Diterima:
Anda memiliki upaya yang baik dengan saran Anda sendiri
find -type d -mmin -2 -ls | grep -Ril "mystring"
Ini akan mengidentifikasi direktori (-type d
) yang telah dimodifikasi dalam dua menit terakhir, bukan file (-type f
). Piping output -ls
ke grep
biasanya akan mencari nama file yang dihasilkan untuk mystring
. Namun, dalam hal ini -R
flag mengubah perilaku grep
dan itu mengabaikan daftar nama file Anda, sebagai gantinya mencari melalui setiap file di dan di bawah direktori saat ini.
Jadi, mari kita bagi masalah menjadi dua bagian
-
Cari file yang terakhir diubah dalam 2 menit terakhir di direktori home Anda
find ~ -type f -mmin -2
-
[File] yang berisi String tertentu
grep -Fl 'certain String' {files...}
Sekarang Anda perlu menyatukannya. {}
adalah pengganti untuk nama file yang dihasilkan oleh find
dari langkah 1, dan +
. di belakangnya menunjukkan bahwa {}
dapat diulang beberapa kali , yaitu beberapa nama file
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Mengubah grep
untuk echo grep
akan menunjukkan kepada Anda apa yang sedang dijalankan oleh find
memerintah; ini bisa menjadi teknik debug yang berguna:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Harap pertimbangkan untuk menjalankan man find
dan man grep
untuk mengetahui berbagai opsi, seperti -F
dan -l
di grep -Fl
, karena jika tidak, Anda tidak belajar apa pun dari latihan yang telah Anda tetapkan; Anda hanya menyalin jawaban.