Ho diversi file con lo stesso nome file di base. Vorrei rimuovere tutti tranne uno
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Se non avessi bisogno di tenerne uno, so che potrei usarlo rm foo.*.
TLDP dimostra ^di annullare una corrispondenza. Attraverso tentativi ed errori, sono stato in grado di trovarlo
rm foo.*[^org]
fa quello che mi serve, ma non capisco davvero la sintassi.
Inoltre, sebbene non sia una limitazione nel mio caso d'uso, penso che questo modello ignori anche foo.oe foo.or. Come funziona questo modello, e quale sarebbe un glob che ignora solo foo.org assomigliare?
Regular Expression. Dovresti stare attento con i tuoi personaggi di raggruppamento. Usando le parentesi hai specificato una classe di caratteri che significa che elimineresti qualsiasi file che avesse un'estensione con le lettere o, ro gin qualsiasi ordine. Utilizzare le parentesi per creare un gruppo e preservare l'ordine dei caratteri.
foo.*[^org]corrisponderà a qualsiasi nome di file che inizia con foo.uno o più caratteri dopo il punto in cui l'ultimo carattere non è o, r o g. Quindi corrisponderebbe foo.orb, ma non foo.orgo foo.oro foo.o. La risposta di GlennJackman mostra come abilitare le funzionalità di corrispondenza estesa del modello per annullare una corrispondenza.
rm foo.*[^org]rimuove tutti i file che l' ultimo carattere non è néo,rnég, quindifoo.foo, non corrisponderebbe neanche.