3 formas de eliminar todos los archivos en un directorio, excepto uno o pocos archivos con extensiones

3 formas de eliminar todos los archivos en un directorio, excepto uno o pocos archivos con extensiones

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:

  1. * - coincide con cero o más personajes
  2. ? - coincide con cualquier personaje
  3. [SEQ] - coincide con cualquier personaje en SEQ
  4. [!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:

  1. *(Lista de patrones) - coincide con cero o más ocurrencias de los patrones especificados
  2. ?(Lista de patrones) - coincide con cero o una ocurrencia de los patrones especificados
  3. +(Lista de patrones) - coincide con uno o más ocurrencias de los patrones especificados
  4. @(Lista de patrones) - coincide con uno de los patrones especificados
  5. !(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'elete 
Comando 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 -v  
Eliminar 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 '\) -delete 
Eliminar 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 globignore 
Eliminar 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.