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.oi 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, ralbo gw 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.orglub foo.orlub 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,ralbog, więcfoo.foonie pasuje albo.