Mam kilka plików o tej samej podstawowej nazwie pliku. Chciałbym usunąć wszystkie oprócz jednego
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Gdybym nie musiał go mieć, wiem, że mógłbym go użyć rm foo.*
.
TLDP demonstruje ^
zanegowanie dopasowania. Dzięki próbom i błędom udało mi się to znaleźć
rm foo.*[^org]
robi to, czego potrzebuję, ale tak naprawdę nie rozumiem składni.
Ponadto, chociaż nie jest to ograniczenie w moim przypadku użycia, myślę, że ten wzór również ignoruje foo.o
i foo.or
. Jak działa ten wzorzec i jak wyglądałby glob ignorujący tylko foo.org
?
Regular Expression
. Powinieneś uważać na swoje postacie grupujące. Za pomocą wsporników już podano klasy znaków sens, że chcesz usunąć wszystkie pliki, które miały rozszerzenie z literami o
, r
albo g
w dowolnej kolejności. Użyj nawiasu, aby utworzyć grupę i zachować kolejność znaków.
foo.*[^org]
będzie pasował do każdej nazwy pliku, która zaczyna się foo.
od jednego lub więcej znaków po kropce, gdzie ostatnim znakiem nie jest o, r lub g. Tak by pasowało foo.orb
, ale nie foo.org
lub foo.or
lub foo.o
. Odpowiedź GlennJackman pokazuje, jak włączyć funkcje rozszerzonego dopasowywania wzorca, aby negować dopasowanie.
rm foo.*[^org]
usuwa wszystkie pliki, których ostatnia postać jest anio
,r
albog
, więcfoo.foo
nie pasuje albo.