Tengo varios archivos con el mismo nombre de archivo base. Me gustaría eliminar todos menos uno
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Si no necesito conservar uno, sé que podría usarlo rm foo.*
.
TLDP demuestra ^
negar un partido. A través de prueba y error, pude encontrar que
rm foo.*[^org]
hace lo que necesito, pero realmente no entiendo la sintaxis.
Además, aunque no es una limitación en mi caso de uso, creo que este patrón también ignora foo.o
y foo.or
. ¿Cómo funciona este patrón, y lo que sería un pegote que ignora solamente foo.org
parece?
Regular Expression
. Debes tener cuidado con tus caracteres de agrupación. Al usar corchetes, ha especificado una clase de caracteres que significa que eliminaría cualquier archivo que tuviera una extensión con las letras o
, r
o g
en cualquier orden. Use paréntesis para crear un grupo y preservar el orden de los caracteres.
foo.*[^org]
coincidirá con cualquier nombre de archivo que comience con foo.
uno o más caracteres después del punto donde el último carácter no sea o, r o g. Por lo tanto, coincidiría foo.orb
, pero no foo.org
o foo.or
o foo.o
. La respuesta de GlennJackman muestra cómo habilitar las características extendidas de coincidencia de patrones para negar una coincidencia.
rm foo.*[^org]
elimina todos los archivos de los cuales último carácter es nio
,r
og
, por lo quefoo.foo
no corresponde a ninguno.