Si alguna vez has intentado eliminar el contenido de una carpeta en UNIX1, es posible que te hayas encontrado con este problema:
$ rm * -f -bash: /bin/rm: Argument list too long
Es decir, en la carpeta hay demasiados archivos y rm no puede con todos ellos. Una posible solución:
$ for i in `ls` ; do rm -f "$i" ; done
Banda sonora: ‘Too Much Information’ de The Police.
Notas:
- Quiero decir Linux, imagino que también pasa en BSD, OpenBSD, Mac OS X, etcétera. [↩]
4 comentarios
No sabes tú cuantas veces leí ese mensaje cuando estaba intentando procesadar una burrada de imágenes con un pequeño script para mi tesis… llegué a odiar bash por segundos
Buena para probar el coloreado de codigo.
Aún así: ‘rm -f “$i” ‘
Si no lo cierras los espacios vuelven un nombre en varios argumentos inválidos y se vuelve riesgoso.
Yo soy más parcial siempre del “ls -1 | while read line ; do rm -f “$line”;done” pero es ya cosa de costumbre de cada quien.
Gracias por la corrección, eduo. Acabo de actualizar la entrada. ¿Es así?
Así funcionaría perfecto siempre y cuando un fichero no tenga en el nombre unas comillas (ah, el bueno de Unix, que no tiene casi caracteres prohibidos).
-rw-r–r– 1 eduo eduo 0 Jan 25 23:38 ”
-rw-r–r– 1 eduo eduo 0 Jan 25 23:38 ,
-rw-r–r– 1 eduo eduo 0 Jan 25 23:38 \
Sip. Eso es un fichero llamado ‘”‘, uno llamado ‘,’ y uno llamado ‘\’