Tengo un directorio que contiene una gran cantidad de archivos. Quiero eliminar todos los archivos excepto file.txt. ¿Cómo hago esto?
Hay demasiados archivos para eliminar los no deseados individualmente y sus nombres son demasiado diversos para usar * para eliminarlos todos excepto este archivo.
Alguien sugirió usar
rm !(file.txt)
Pero no funciona. Devuelve:
Badly placed ()'s
Mi sistema operativo es Scientific Linux 6.
¿Alguna idea?
Respuesta aceptada:
POSIXly:
find . ! -name 'file.txt' -type f -exec rm -f {} +
eliminará todos los archivos regulares (recursivamente, incluidos los ocultos) excepto file.txt
. Para eliminar directorios, cambie -type f
a -type d
y agregue -r
opción para rm
.
En bash
, para usar rm -- !(file.txt)
, debe habilitar extglob:
$ shopt -s extglob
$ rm -- !(file.txt)
(o llamando a bash -O extglob
)
Tenga en cuenta que extglob
solo funciona en bash
y la familia de conchas Korn. Y usando rm -- !(file.txt)
puede causar una Argument list too long
error.
En zsh
, puedes usar ^
para negar el patrón con extendedglob habilitado:
$ setopt extendedglob
$ rm -- ^file.txt
o usando la misma sintaxis con ksh
y bash
con opciones ksh_glob
y no_bare_glob_qual
activado.