Si desea eliminar todos los archivos cuyos nombres coinciden con una forma en 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; puede alimentar la salida de grep
a rm -f
. Por ejemplo, si algunos de los nombres de archivo comienzan con "abc.log"
y otros con "ABC.log"
, le grep
permite hacer una coincidencia que no distinga 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, ls | grep ...
primero ejecuto el comando y verifico que produce 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 la flecha hacia arriba o Ctrl-P y editar la línea anterior para agregar el rm -f
comando.
Esto supone que estás usando el shell bash. Es posible que algunos otros shells, particularmente csh y tcsh y algunos shells antiguos derivados de sh, no admitan la $(...)
sintaxis. Puede utilizar la sintaxis de comillas invertidas equivalente:
$ rm -f `ls | grep -i '^abc\.log\.'`
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 principio de cada línea y luego:
$ . ./list
o
$ source ./list
La edición del archivo también es una oportunidad para agregar comillas cuando sea necesario, por ejemplo, cambiar rm -f foo bar
a rm -f 'foo bar'
.