Cara mencari kata di seluruh konten direktori di linux


15

perlu mencari sesuatu di seluruh konten

Aku sedang mencoba:

find . | xargs grep word

Saya mendapatkan kesalahan:

xargs: kutipan yang tidak ditentukan

Bagaimana cara mencapai ini?

Jawaban:


15

xargsmengharapkan input dalam format yang tidak dihasilkan perintah lain, sehingga sulit digunakan secara efektif. Apa yang salah di sini adalah bahwa Anda memiliki file yang namanya harus dikutip pada input xargs(mungkin mengandung a ').

Jika grep Anda mendukung -ratau -Ropsi untuk pencarian rekursif, gunakan itu.

grep -r word .

Jika tidak, gunakan -execprimer dari find. Ini adalah cara biasa untuk mencapai efek yang sama seperti xargs, kecuali tanpa batasan pada nama file. Versi terbaru yang wajar findmemungkinkan Anda untuk mengelompokkan beberapa file dalam satu panggilan ke perintah tambahan. Lulus /dev/nulluntuk grepmemastikan bahwa itu akan menampilkan nama file di depan setiap pertandingan, bahkan jika itu dipanggil pada satu file.

find . -type f -exec grep word /dev/null {} +

Versi findyang lebih lama (pada sistem yang lebih lama atau OpenBSD, atau utilitas yang dikurangi seperti BusyBox) hanya dapat memanggil perintah tambahan pada satu file pada satu waktu.

find . -type f -exec grep word /dev/null {} \;

Beberapa versi finddan xargsmemiliki ekstensi yang memungkinkan mereka berkomunikasi dengan benar, menggunakan karakter nol untuk memisahkan nama file sehingga tidak perlu mengutip. Saat ini, hanya OpenBSD yang memiliki fitur ini tanpa memiliki -exec … {} +.

find . -type f -print0 | xargs -0 grep word /dev/null

+1 khusus untuk /dev/null. Ini adalah gangguan ketika format output dapat bervariasi, tergantung pada berapa banyak file yang cocok ... terima kasih.
Peter.O

12

Saya kira Anda maksud opsi pertama

grep rekursif, untuk mencari konten di dalam file

grep -R "content_to_search" /path/to/directory

Itu rekursif, untuk mencari file yang cocok

ls -lR | grep "your_search"

grep -rin untuk recursive-case_insensitive-show_line_number

Saya ingin dapat mencari konten dari setiap file.

yang pertama mengembalikan setiap ocurrence dalam file apa pun, menentukan file di mana ocurrence ditemukan

2

Jika Anda memiliki alat GNU (yang Anda lakukan jika tag Linux akurat) maka Anda dapat menggunakan -print0dan -0untuk mengatasi masalah mengutip yang biasa:

find . -type f -print0 | xargs -0 grep word

0

Ada juga ACK , ini dirancang untuk melewati direktori khusus seperti.svn , .gitdan semacamnya. Ini adalah alat harian untuk pengembang.

Cukup dekat dengan untuk switch umum.

Ex. :

ack -r string .

Paket ack-greppada suka debian & debian.



-1

Saya pikir Anda ingin menemukan string dalam file

Mencoba find . -name "*" | xargs grep -l "string"


Pesan kesalahan dari xargs ("Kutipan Unterminated") berarti OP memiliki file dalam. yang memiliki kutipan dalam namanya. Garis Anda akan serak pada itu juga. Seperti yang dicatat oleh mu, kamu membutuhkan penghentian yang berbeda.
thiton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.