(13 respuestas)
Cerrado hace 5 años.
Esta es la situación.
Tengo un directorio que contiene muchos archivos con diferentes extensiones. Quiero eliminar todos los archivos excepto uno con un nombre específico.
Esto podría hacerse fácilmente usando la GUI seleccionando todo y presionando ctrl y anulando la selección del archivo en cuestión.
Eso es exactamente lo que quiero, pero ¿cómo puedo hacerlo desde la línea de comandos?
Por ejemplo: dirA contiene los siguientes archivos:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Quiero eliminar todos los archivos manteniendo solo el archivo llamado a.txt
.
Mejor respuesta
He venido con este sencillo y gran comando:
rm !(a.txt)
puedes usar ! como una negación
Pruebe el globo con eco primero, es decir,
echo !(a.txt)
Si no funciona, para bash
es posible que deba habilitar esto con
shopt -s extglob
Si desea conservar ambos a.txt
y b.txt
, puede usar !(a.txt|b.txt)
o !([ab].txt)
.
Editar:
para hacer rm
trabajando recursivamente solo agregue -r
Me gusta
rm -r !(a.txt)
y también, está trabajando con la carpeta. solo necesita cambiar el nombre al nombre del directorio, como para a_dir
rm -r !(a_dir)