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.oy 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, ro gen 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.orgo foo.oro 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,rog, por lo quefoo.foono corresponde a ninguno.