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?
rm foo.*[^org]
menghapus semua file yang bukan karakter terakhiro
,r
ataug
, jadifoo.foo
tidak akan cocok dengan keduanya.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 hurufo
,r
ataug
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 denganfoo.
satu atau lebih karakter setelah titik di mana karakter terakhir bukan o, r, atau g. Sehingga akan cocokfoo.orb
, tapi tidakfoo.org
ataufoo.or
ataufoo.o
. Jawaban GlennJackman menunjukkan cara mengaktifkan fitur pencocokan pola yang diperluas untuk meniadakan kecocokan.Jawaban:
Ini "foo." diikuti oleh sesuatu BUKAN "org"
ref: https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
sumber
@()
untuk daftar pola: stackoverflow.com/a/217208/3779853Di bash, Anda juga bisa menggunakan
GLOBIGNORE="*.org"; rm -i foo*
.Dan
unset GLOBIGNORE
saat selesai.Sebenarnya tidak lebih baik dari itu
shopt -s extglob
, tetapi saya merasa lebih mudah diingat.sumber
( GLOBIGNORE="*.org"; rm -i foo* )
GLOBIGNORE="*foo*:*bar*"
Sebuah pipa bisa lakukan?
(jelas Anda mungkin ingin mengganti gema dengan rm di rantai terakhir).
sumber
ls -1
harus lebih andal untuk memastikan semua file ditangani secaragrep
terpisahOP sangat dekat:
meskipun dalam hal
*
ini tidak perlu.sumber