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.