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.