SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 26 de marzo de 2010

rm lista demasiado larga para borrar archivos

Introducción
Si tenemos muchos archivos en un directorio -más que <MAX_ARGVS>-y queremos borrarlos utilizando <rm> puede que nos diga <Lista de argumentos demasiado larga>. Para solucionar este problema, utilizaremos el comando find con la opción <-exec rm {} \;>, veamos un ejemplo donde queremos borrar todos los archivo .req de un directorio
# rm *.req
bash: /usr/bin/rm: Lista de argumentos demasiado larga
# find . -name "*.req" -exec rm {} \;
# ls -l *.req
*.req: No existe tal archivo o directorio
Debeis tener en cuenta que -como comenta Joan- <find> realiza las operaciones de forma recursiva, por lo tanto, debemos tener cuidad cuando ejecutamos estos comandos.


Referencias

2 comentarios:

  1. Hola,


    Recomendaria usar el parámetro "-maxdepth 1" porque el "find" buscara todos los ficheros de forma recursiva en el path y la sorpresa puede ser mayúscula:

    find . -maxdepth 1 -name "*.req" -exec rm {} \;

    Y otro detalle, si usas el /usr/gnu/bin/find de OpenSolaris tienes disponible el parametro -delete que evita usar el -exec :

    find . -maxdepth 1 -name "*.req" -delete

    Es increible lo que puedes llegar a hacer con el find.


    Enhorabuena por el blog.

    ResponderEliminar
  2. Hola Joan,

    Muy buena aclaración. Es cierto que "find" nos permite hacer cosas "realmente potentes" pero si, hay veces que un error "tan sencillo" como ese, puede hacernos tirar de backup, xD

    Lo cierto es que la opción "-maxdepth" no existe en Solaris, si que existe en GNU Find.

    He modificado el post para aclarar un poco este tema,

    Gracias,
    Urko

    ResponderEliminar