Temukan file yang difilter oleh banyak ekstensi


52

Apa sintaks yang benar untuk:

find . -type f -name \*.\(shtml\|css\)

Ini berfungsi, tetapi tidak elegan:

find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt

Bagaimana melakukan hal yang sama, tetapi dengan penekanan tombol yang lebih sedikit?

Jawaban:


75

Anda dapat menggabungkan berbagai ekspresi pencarian dengan operator logika -oratau -and, sehingga casing Anda dapat ditulis sebagai

find . -type f \( -name "*.shtml" -or -name "*.css" \)

Ini juga menunjukkan bahwa Anda tidak perlu keluar dari karakter shell khusus ketika Anda menggunakan tanda kutip.

Sunting

Karena -ormemiliki prioritas lebih rendah daripada yang tersirat -andantara -typedan -namebagian nama put pertama ke dalam tanda kurung seperti yang disarankan oleh Chris.


Itu juga akan mencetak direktori bernama "* .css".
Teddy

Hmm, tanda kurung di versi terbaru Anda agak salah tempat. Masing-masing tanda kurung harus berakhir sebagai parameter terpisah untuk ditemukan , sehingga mereka membutuhkan spasi di sekitar mereka (`" .css ")` menghasilkan nilai string tunggal; itu sama dengan (misalnya) `' .css)' ). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before -nama`, bukan antara itu dan 'operan').
Chris Johnsen

15

Ini adalah salah satu cara untuk melakukan versi pertama Anda:

find -type f -regex ".*/.*\.\(shtml\|css\)"

12

Anda harus mengurung untuk hanya menyertakan file:

find . -type f \( -name "*.shtml" -o -name "*.css" \) -print

Bonus : ini adalah sintaks yang sesuai dengan POSIX.


4

Saya sering menemukan diri saya berakhir dengan menggunakan egrep, atau pipa yang lebih panjang, atau perl untuk filter yang lebih kompleks:

find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'

Ini mungkin agak kurang efisien tetapi itu biasanya tidak menjadi perhatian, dan untuk hal-hal yang lebih kompleks biasanya lebih mudah untuk dibangun dan dimodifikasi.

Peringatan standar berlaku tentang tidak menggunakan ini untuk file dengan nama file aneh (misalnya mengandung baris baru).


+1 untuk solusi bersih dan modular, hambatan kinerja biasanya terjadi saat memproses file yang dihasilkan dari hasil pencarian.
Cristik
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.