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.o
e 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
, r
o g
in 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.org
o foo.or
o 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
,r
nég
, quindifoo.foo
, non corrisponderebbe neanche.