sábado, 13 de diciembre de 2008

rm : argument list too long

A veces cuando queremos borrar archivos, aplicamos el comando rm. En directorio con muchos archivos (rm *spam o de forma genérica rm * ) puede salirnos el mensaje de error "argument list too long". Para solucionar eso usaremos el siguiente comando:
find . -name '*spam' | xargs rm

De esta manera eliminaremos todos los ficheros que deseemos independientemente del número. En el ejemplo que acaben en *spam (ej archivo.spam, loqueseaspam ...).

Si el nombre de los archivos tiene espacios el comando anterior no funcionará, tendremos que usar el siguiente comando que es más genérico:
find . -name '*spam' | xargs -i rm {}

donde el -i indica que se sustituya {} por el nombre del archivo.

Otra forma de hacerlo:
find . -iname "*spam" -print0 | xargs -0 rm

Con el -print0 la salida de find irá con el carácter null, en lugar del salto de línea que usa por defecto. Con el parámetro -0 indicamos que xargs considere como separador el carácter null, en lugar del espacio o el salto de línea.

Otro ejemplo del uso de find y grep para buscar archivos que contienen una cadena de texto sin usar pipes:
find . -exec grep -H -n 'textoabuscar' {} \;

Otro ejemplo útil del uso de find y xargs, puede ser descomprimir archivos rar con unrar:
find . -iname "*part1.rar" | xargs -i unrar x {}

No hay comentarios: