it-swarm-id.com

Cara menggunakan perintah find untuk mencari beberapa ekstensi

Saya bisa mendapatkan semua gambar jpg dengan menggunakan:

find . -name "*.jpg"  

Tetapi bagaimana saya bisa menambahkan file png ke hasil juga?

143
wong2

Gunakan bendera -o Di antara berbagai parameter.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) bekerja seperti jimat.

NOTE Di sana harus ada spasi antara braket dan isinya atau ia menang bekerja.

Penjelasan:

  • -type f - hanya mencari file (bukan direktori)
  • \( & \) - diperlukan agar -type f Berlaku untuk semua argumen
  • -o - logis OR operator
  • -iname - seperti -name, Tetapi pertandingan tidak peka huruf besar-kecil
176
Shadur

Anda dapat menggabungkan kriteria dengan -o as disarankan oleh Shadur . Perhatikan bahwa -o memiliki prioritas lebih rendah dari penjajaran, jadi Anda mungkin perlu tanda kurung.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

Di Linux, Anda dapat menggunakan -regex untuk menggabungkan ekstensi dengan cara terser. Sintaks regexp default adalah Emacs ( regexps dasar ditambah beberapa ekstensi seperti \| untuk pergantian); ada opsi untuk beralih ke extended regexps .

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

Pada FreeBSD, NetBSD dan OSX, Anda dapat menggunakan -regex dikombinasikan dengan -E untuk regexps yang diperluas.

find -E . -regex '.*\.(jpg|png)'

Ini lebih benar:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
44
Dimitry

Untuk memperjelasnya, satu-satunya opsi yang berfungsi di Linux, Unix dan rasa macOS adalah:

find -E . -regex '.*\.(jpg|png)'

Itu karena versi OS X sedikit berbeda, tetapi itu penting untuk menulis hal-hal yang berjalan baik pada kebanyakan platform.

9
sorin