Eliminar todos los archivos excepto uno con rm

10

¿Hay alguna forma de eliminar todos los archivos en un directorio, excepto uno con un nombre de archivo determinado? Por ejemplo, si tuviera un directorio que contiene los archivos file1, file2y dontdelete. ¿Habría alguna forma de eliminar rápidamente file1, file2y no dontdelete? Sé que podría hacerlo, rm file1 file2pero eso no funcionaría para un montón de archivos. Además, estoy en Mac OS X si eso hace la diferencia.

Wuffers
fuente
El comodín simple puede ser su solución: el archivo rm * eliminará el archivo1 y el archivo2 pero no se eliminará. Si sus necesidades son más complejas, entonces, dependiendo del lenguaje de scripting de shell, puede generar una lista de archivos que desea eliminar usando una expresión regular y canalizar esto al comando rm.
therobyouknow 01 de
@Rob: Sí, mi situación es más compleja que eso. Y la respuesta de Ignacio funcionó. Gracias, sin embargo!
Wuffers

Respuestas:

16

En bash:

shopt -s extglob
rm !(dontdelete)
Ignacio Vazquez-Abrams
fuente
1
+1 Wow solución muy sucinta. Lo tendré en cuenta si lo necesito.
therobyouknow
puede esto ser extendida para incluir varios directorios que no WAN para eliminar
mcgrailm