Bagaimana cara saya menerima string secara rekursif melalui semua .gzfile di semua direktori dan subdirektori?
Bagaimana cara saya menerima string secara rekursif melalui semua .gzfile di semua direktori dan subdirektori?
Jawaban:
@Steve Weet hampir tiba. Penggunaan / dev / null sebagai argumen tambahan adalah cara yang bagus untuk memaksa nama file ditampilkan (saya akan ingat itu, terima kasih Steve) tetapi masih menjalankan exec untuk setiap file yang ditemukan - overhead yang besar.
Anda ingin menjalankan zgrep sesering mungkin, dapatkan hasil maksimal dari setiap eksekusi:
find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN
xargsakan menyediakan sebanyak mungkin args (nama file) ke zgrep, dan berulang kali jalankan sampai ia menggunakan semua file yang disediakan oleh findperintah. Menggunakan -print0dan -0opsi memungkinkan untuk bekerja jika ada spasi di salah satu file atau nama direktori.
Di Mac OS X, Anda dapat mencapai efek yang sama tanpa xargs:
find . -iname '*.gz' -exec zgrep PATTERN {} +
-Huntuk selalu menampilkan nama file dengan baris yang cocok, setidaknya di GNU grep.
$ zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.
Jadi sesuatu seperti itu
find . -iname "*.gz" -exec zgrep PATTERN {} \
zgrep -runtuk pergi melalui pohon atau jika -r tidak bekerja, pipa output dari xargs zgrep
/bin/zgrep: -r: option not supportedsistem ubuntu saya yang baru diinstal.
xargssebagai gantinya.
@aioobe hampir sampai. Perintah akan melakukan pekerjaan tetapi tidak akan memberi tahu Anda nama file
Yang berikut juga harus memberi tahu Anda nama file:
find . -iname "*.gz" -exec zgrep PATTERN {} /dev/null \;
Penambahan /dev/nullakan memastikan bahwa zgrep melihat dua nama file sehingga akan menunjukkan kepada Anda nama file jika menemukan string
EDIT
Penelitian lebih lanjut mengungkapkan bahwa untuk mesin saya (OS / X) -execargumen untuk menemukan akan menambahkan sebanyak mungkin nama file (mirip dengan cara xargsberperilaku).
-exec- saya semua tentang portabilitas jadi saya tidak akan menggunakannya dalam skrip, tetapi bagus untuk command prompt.
find, tetapi sebagian besar versi modern (misalnya dalam distro berbasis Debian).
-Huntuk selalu menampilkan nama file dengan baris yang cocok, setidaknya di GNU grep, alih-alih /dev/nullperetasan.