Saya memiliki beberapa file dengan nama file dasar yang sama. Saya ingin menghapus semua kecuali satu
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Jika saya tidak perlu menyimpannya, saya tahu saya bisa menggunakannya rm foo.*
.
TLDP menunjukkan ^
untuk meniadakan pertandingan. Melalui trial and error, saya dapat menemukannya
rm foo.*[^org]
melakukan apa yang saya butuhkan, tetapi saya tidak begitu mengerti sintaksisnya.
Selain itu, meskipun bukan batasan dalam kasus penggunaan saya, saya pikir pola ini juga mengabaikan foo.o
dan foo.or
. Bagaimana pola ini bekerja, dan seperti apa gumpalan yang mengabaikan hanya foo.org
terlihat?
Regular Expression
. Anda harus berhati-hati dengan karakter pengelompokan Anda. Dengan menggunakan tanda kurung Anda telah menentukan kelas karakter yang berarti bahwa Anda akan menghapus file yang memiliki ekstensi dengan huruf o
, r
atau g
dalam urutan apa pun. Gunakan tanda kurung untuk membuat grup dan mempertahankan urutan karakter.
foo.*[^org]
akan cocok dengan nama file apa pun yang dimulai dengan foo.
satu atau lebih karakter setelah titik di mana karakter terakhir bukan o, r, atau g. Sehingga akan cocok foo.orb
, tapi tidak foo.org
atau foo.or
atau foo.o
. Jawaban GlennJackman menunjukkan cara mengaktifkan fitur pencocokan pola yang diperluas untuk meniadakan kecocokan.
rm foo.*[^org]
menghapus semua file yang bukan karakter terakhiro
,r
ataug
, jadifoo.foo
tidak akan cocok dengan keduanya.