GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar varios archivos a la vez en Bash en Linux?

Si desea eliminar todos los archivos cuyos nombres coincidan con una forma particular, un comodín (patrón global) es la solución más sencilla. Algunos ejemplos:

$ rm -f abc.log.*             # Remove them all
$ rm -f abc.log.2012*         # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]*  # Remove all files from the first quarter of 2012

Las expresiones regulares son más poderosas que los comodines; puedes alimentar la salida de grep a rm -f . Por ejemplo, si algunos de los nombres de archivo comienzan con "abc.log" y algunos con "ABC.log" , grep le permite hacer una coincidencia que no distingue entre mayúsculas y minúsculas:

$ rm -f $(ls | grep -i '^abc\.log\.')

Esto causará problemas si alguno de los nombres de archivo contiene caracteres divertidos, incluidos espacios. Ten cuidado.

Cuando hago esto, ejecuto el ls | grep ... comando primero y verifique que produzca el resultado que quiero, especialmente si estoy usando rm -f :

$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)

donde !! se expande al comando anterior. O puedo escribir flecha arriba o Ctrl-P y editar la línea anterior para agregar el rm -f comando.

Esto supone que está utilizando el shell bash. Algunos otros shells, particularmente csh y tcsh y algunos shells antiguos derivados de sh, pueden no ser compatibles con $(...) sintaxis. Puede usar la sintaxis de acento grave equivalente:

$ rm -f `ls | grep -i '^abc\.log\.'`

El $(...) la sintaxis es más fácil de leer y, si eres realmente ambicioso, se puede anidar.

Finalmente, si el subconjunto de archivos que desea eliminar no se puede expresar fácilmente con una expresión regular, un truco que uso a menudo es enumerar los archivos en un archivo de texto temporal y luego editarlo:

$ ls > list
$ vi list   # Use your favorite text editor

Luego puedo editar el list archivo manualmente, dejando solo los archivos que quiero eliminar, y luego:

$ rm -f $(<list)

o

$ rm -f `cat list`

(Nuevamente, esto supone que ninguno de los nombres de archivo contiene caracteres divertidos, particularmente espacios).

O, al editar el list archivo, puedo agregar rm -f al comienzo de cada línea y luego:

$ . ./list

o

$ source ./list

Editar el archivo también es una oportunidad para agregar comillas donde sea necesario, por ejemplo, cambiando rm -f foo bar a rm -f 'foo bar' .


Simplemente use la selección multilínea en sublime para combinar todos los archivos en una sola línea y agregue un espacio entre cada nombre de archivo y luego agregue rm al principio de la lista. Esto es principalmente útil cuando no hay un patrón en los nombres de archivo que desea eliminar.

[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10

Bash admite todo tipo de comodines y expansiones.

Su caso exacto sería manejado por la expansión de llaves, así:

$ rm -rf abc.log.2012-03-{14,27,28}

Lo anterior expandirá a un solo comando con los tres argumentos, y sería equivalente a escribir:

$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28

Es importante tener en cuenta que esta expansión la realiza el shell, antes de rm incluso está cargado.


Utilice un comodín (* ) para hacer coincidir varios archivos.

Por ejemplo, el siguiente comando eliminará todos los archivos con nombres que comiencen con abc.log.2012-03- .

rm -f abc.log.2012-03-*

Recomiendo ejecutar ls abc.log.2012-03-* para enumerar los archivos para que pueda ver lo que va a eliminar antes de ejecutar el rm comando.

Para obtener más detalles, consulte la página del manual de Bash sobre la expansión del nombre de archivo.


Linux
  1. Cómo eliminar archivos ENORMES (100-200 GB) en Linux

  2. Cómo administrar archivos de registro usando Logrotate en Linux

  3. Cómo escribir archivos de registro en RAM usando Log2ram en Linux

  4. Cómo comprimir varios archivos en Linux

  5. Cómo cambiar el nombre de varios archivos juntos en Linux usando 3 métodos

Cómo eliminar archivos enumerados en otro archivo en Linux

Cómo ver los archivos de registro de Nginx en Linux

Cómo ver los archivos de registro de Apache en Linux

Cómo quitar/eliminar archivos en Linux usando el comando rm

Cómo ejecutar varios comandos de Linux a la vez en la terminal de Linux

Cómo eliminar archivos y directorios usando la línea de comandos de Linux