Bagaimana cara menggabungkan 2 kondisi name di find?


94

Saya ingin mencari file yang tidak cocok dengan 2 -namekondisi. Saya bisa melakukannya seperti ini:

find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"

dan ini akan menghasilkan hasil yang tepat tetapi bisakah saya bergabung dengan 2 kondisi ini dengan OR entah bagaimana?

Jawaban:


46

Anda dapat melakukan ini dengan menggunakan negasi -regexjuga: -

 find ./ ! -regex  '.*\(deb\|vmdk\)$'

6
Catatan yang -regexkurang portabel dibandingkan -name.
jw013

145

ya kamu bisa:

find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)

Penjelasan dari spesifikasi POSIX :

! ekspresi : Negasi primer; operator BUKAN unary.

( ekspresi ): Benar jika ekspresi itu benar.

ekspresi -o ekspresi : Pergantian primer; operator ATAU. Ungkapan kedua tidak akan dievaluasi jika ungkapan pertama benar.

Perhatikan bahwa tanda kurung, baik membuka dan menutup, diawali dengan garis miring terbalik ( \) untuk mencegah evaluasi oleh shell.


2
Jika Anda melakukan -execatau tindakan lain pada findhasilnya, ingat untuk menyisipkan \( \)seluruh kriteria, jika tidak -execakan berlaku hanya untuk -orkriteria terakhir . Untuk mengerjakan semuanya, beri tanda kurung mereka:find \( <criterion> -o <criterion> \) -exec <command>
Victor Sergienko

25

Anda sudah dekat dengan solusi:

find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"

Anda dapat menggabungkan operator logika berikut dalam urutan apa pun:

-a   -and      - operator AND
-o   -or       - operator OR
!              - operator NOT

6

Anda dapat menggunakan ekspresi reguler seperti pada:

find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'

Backslash adalah karakter pelarian; .cocok dengan satu karakter, dan *berfungsi untuk mencocokkan karakter sebelumnya nol atau lebih banyak kali, jadi .*artinya cocok dengan nol atau lebih banyak karakter.


1
Menambahkan penjelasan akan membuat jawaban Anda lebih baik.
NN

Kamu benar. Menambahkan beberapa penjelasan.
Francesco Turco
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.