3 formas de eliminar todos los archivos en un directorio, excepto uno o pocos archivos con extensiones
- 2245
- 14
- Alejandro Duran
A veces se encuentra en una situación en la que necesita eliminar todos los archivos en un directorio o simplemente limpiar un directorio eliminando todos los archivos, excepto los archivos de un tipo determinado (que termina con una extensión particular).
En este artículo, le mostraremos cómo eliminar archivos en un directorio, excepto ciertas extensiones o tipos de archivos utilizando RM, encontrar y Globignore comandos.
Antes de avanzar más, comencemos brevemente echando un vistazo a un concepto importante en Linux - Filename Pattern Matoring, que nos permitirá tratar con nuestro problema en cuestión.
Leer sugerido: Use el comando Buscar para buscar múltiples nombres de archivo/extensiones en Linux
En Linux, un patrón de shell es una cadena que consiste en los siguientes caracteres especiales, que se denominan comodines o metacharacteres:
*
- coincide con cero o más personajes?
- coincide con cualquier personaje[SEQ]
- coincide con cualquier personaje en SEQ[!SEQ]
- coincide con cualquier personaje que no esté en SEQ
Hay tres métodos posibles que exploraremos aquí, y estos incluyen:
Eliminar archivos utilizando operadores de coincidencia de patrones extendidos
Los diferentes operadores de coincidencia de patrones extendidos se enumeran a continuación, donde lista de patones es una lista que contiene uno o más nombres de archivo, separados utilizando el |
personaje:
*(Lista de patrones)
- coincide con cero o más ocurrencias de los patrones especificados?(Lista de patrones)
- coincide con cero o una ocurrencia de los patrones especificados- +(Lista de patrones) - coincide con uno o más ocurrencias de los patrones especificados
@(Lista de patrones)
- coincide con uno de los patrones especificados!(Lista de patrones)
- coincide con cualquier cosa excepto uno de los patrones dados
Para usarlos, habilitar el extlob Opción de shell de la siguiente manera:
# Shopt -s extglob
1. Para eliminar todos los archivos en un directorio, excepto el nombre de archivo, escriba el comando a continuación:
$ RM -V !("Nombre del archivo")Eliminar todos los archivos excepto un archivo en Linux
2. Para eliminar todos los archivos con la excepción de nombre de archivo1 y nombre de archivo2:
$ RM -V !("FileName1" | "FileName2")Eliminar todos los archivos excepto pocos archivos en Linux
3. El siguiente ejemplo muestra cómo eliminar todos los archivos que no sean todos .cremallera
archivos interactivamente:
$ rm -i !(*.cremallera)Eliminar todos los archivos excepto los archivos zip en Linux
4. A continuación, puede eliminar todos los archivos en un directorio aparte de todos .cremallera
y .ODT
Archivos de la siguiente manera, mientras se muestra lo que se está haciendo:
$ RM -V !(*.Zip |*.ODT)Eliminar todos los archivos, excepto ciertas extensiones de archivos
Una vez que tenga todos los comandos requeridos, apague el extlob Opción de shell como así:
$ shopt -u extglob
Eliminar archivos usando el comando Linux Buscar
Según este método, podemos usar el comando Buscar exclusivamente con las opciones apropiadas o junto con Xargs Comando empleando una tubería como en los formularios a continuación:
$ find / directorio / -type f -not -name 'patrón' -delete $ find / directorio / -type f -not -name 'patrón' -print0 | xargs -0 -i rm $ find / directorio / -type f -not -name 'patrón' -print0 | xargs -0 -i rm [opciones]
5. El siguiente comando eliminará todos los archivos aparte de .GZ
Archivos en el directorio actual:
$ Find . -escriba f -not -name '*.gz'eleteComando Buscar: eliminar todos los archivos excepto .archivos GZ
6. Usando un tubería y Xargs, Puede modificar el caso anterior de la siguiente manera:
$ Find . -escriba f -not -name '*gz' -print0 | xargs -0 -i rm -vEliminar archivos usando los comandos Buscar y XARGS
7. Veamos un ejemplo adicional, el siguiente comando eliminará todos los archivos excluyendo .GZ
, .ODT
, y .JPG
Archivos en el directorio actual:
$ Find . -escriba f -not \ ( -nombre '*gz' -o -name '*Odt' -o -name '**.jpg '\) -deleteEliminar todos los archivos excepto las extensiones de archivos
Eliminar archivos usando la variable Bash Globignore
Sin embargo, este último enfoque solo funciona con Bash. Aquí el Globignore Variable almacena una lista de patrones separada por colon (nombres de archivo) que se ignorará por la expansión del nombre de la ruta.
Leer sugerido: Útil 12 ejemplos prácticos sobre el comando GREP en Linux
Para emplear este método, muévase al directorio que desea limpiar, luego configure el Globignore variable de la siguiente manera:
Prueba de $ CD $ globignore =*.ODT:*.Yo asi:*.TXT
En este caso, todos los archivos que no sean .ODT
, .Yo asi
, y .TXT
Los archivos se eliminarán del directorio actual.
Ahora ejecute el comando para limpiar el directorio:
$ rm -v *
Después, apague Globignore variable:
$ unset globignoreEliminar archivos usando la variable Bash Globignore
Nota: Para comprender el significado de las banderas empleadas en los comandos anteriores, consulte las páginas del hombre de cada comando que hemos utilizado en las diversas ilustraciones.
Eso es todo! Si tiene alguna otra técnica de línea de comando en mente para el mismo propósito, no olvide compartir con nosotros a través de nuestra sección de comentarios a continuación.
- « Photorec recupere archivos eliminados o perdidos en Linux
- Tecmenta.com - los mejores artículos de 2016 »