Judul pertanyaan Anda mengatakan "file yang mengandung" sebuah kata. Namun, dalam pertanyaan Anda, Anda menyebutkan "dapatkan nama file yang mengandung" sebuah kata. Ini adalah hal yang berbeda. Untungnya, keduanya agak sederhana, jadi saya hanya akan menunjukkan kepada Anda berdua.
Untuk menemukan file yang mengandung kata:
grep -iR "word1".
-I mengatakan untuk mengabaikan kasus. -R bersifat rekursif (artinya subdirektori dicari). (Huruf kapital didokumentasikan oleh OpenBSD dan lebih mirip dengan ls, jadi saya lebih suka over -r.) Periode menentukan tempat untuk mulai mencari.
Untuk menemukan nama file yang mengandung kata:
temukan. -iname " word1 "
-Iname adalah versi "nama" yang tidak peka huruf besar-kecil.
Periode menentukan tempat untuk mulai mencari. Direktori saat ini sering merupakan pilihan yang baik.
Catatan: Anda mereferensikan " . " Di salah satu contoh Anda. Itu bagus untuk DOS, dan biasanya bagus di Microsoft Windows, tetapi merupakan kebiasaan yang sangat buruk untuk lingkungan Unix. Melihat itu membuat saya berpikir Anda terbiasa dengan Windows. Nah, pahami bahwa di Windows, "FIND" (atau "find") menempatkan teks dalam file. Unix berbeda: "grep" menempatkan teks dalam file, dan "menemukan" mencari nama file.
Sekarang, untuk mengecualikan kata 99, dan untuk menempatkannya dalam file teks, tambahkan teks berikut:
| grep -v word99 >> output.txt
Ini adalah kunci pipa, hampir selalu Shift-Backslash.
Jadi, sebagai contoh, jika Anda ingin melakukan keduanya, gunakan:
grep -iR "word1". | grep -v word99 >>
menemukan output.txt . -iname " word1 " | grep -v word99 >> output.txt
Bagian sebelum karakter pipa akan menjalankan perintah, dan mengirim output ke pipa gaya Unix. Kemudian, konten dikirim dari pipa ke input standar perintah berikutnya. grep -v akan melihat input standar yang diterimanya, dan mengecualikan apa yang Anda inginkan. grep -v akan mengirimkan hasil yang tersisa ke output standarnya. >> akan mengarahkan output standar perintah sebelumnya ke akhir file teks yang ditentukan.
Alasan mengapa Anda tidak melihat opsi yang terdokumentasi dalam perintah "find", tentang cara mengecualikan teks, adalah bahwa Unix sangat dirancang dengan gagasan membuat program yang lebih sederhana, dan menggunakan teknik perpipaan untuk menyebabkan efek yang rumit. Di lingkungan Microsoft, kode Microsoft lama lebih rumit dengan penanganan pipa, jadi program pada dasarnya mencoba untuk menggabungkan lebih banyak fungsi ke dalam setiap program. Di satu sisi, itu tampaknya lebih sederhana untuk pengguna akhir (memiliki semuanya bawaan), tetapi pendekatan itu kurang konsisten. Ketika Anda menggunakan Unix, jangan takut dengan perpipaan: begitu Anda terbiasa, Anda mungkin akan menyederhanakan banyak hal, tetapi karena Anda dapat menggunakan alat sederhana Anda dalam banyak situasi, sehingga Anda tidak perlu untuk mempelajari kembali teknik sederhana berulang-ulang (untuk setiap program yang berbeda).
grep -r … *
hampir selalu lebih baik ditulisgrep -r … .
. Versi asterisk menjadi jelek jika ada terlalu banyak file di direktori saat ini, dll.