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.odan 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, ratau gdalam 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.orgatau foo.oratau 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,rataug, jadifoo.footidak akan cocok dengan keduanya.