20090819

archivos cuyo nombre tiene guion

Suponiendo que alguien creo un archivo llamado -rw-r--r--
$ ls
.bash_history .bashrc -rw-r--r--
$ file *rw*
-rw-r--r--: gzip compressed data, from MS-DOS


Lo intento listar, mover, descomprimir y no lo permite
$ ls '-rw-r--r--'
ls: invalid line width: -r--r--
$ mv '-rw-r--r--' rw
mv: invalid option -- r
Try `mv --help' for more information.
$ ls \-rw\-r\-\-r\-\-
ls: invalid line width: -r--r--


Intentando varias formas por fin logre renombrarlo
$ find . -name "-rw*" -exec mv {} rw.gz \;
$ ls
.bash_history .bashrc rw.gz

5 comentarios:

Thot dijo...

Hay una forma mucho más fácil.

mv -- -rw-r--r-- rw.gz

El parámetro -- es para tomar archivos con guiones.

Omar Hernandez Sarmiento [petrohs] dijo...

opción muy interesante, no la vi documentada en el man

Anónimo dijo...

Solo tienes que usar las comillas invertidas (man de bash)

rm ´-rw*´

http://koshrf.fercusoft.com/

Omar Hernandez Sarmiento [petrohs] dijo...

Intente, pero creo que no...

$ mv ´--algo´ algo
mv: no se puede efectuar `stat' sobre «´--algo´»: No existe el fichero ó directorio

$ mv `--algo` algo
bash: --algo: orden no encontrada
mv: falta el operando archivo de destino después de «algo»
Pruebe `mv --help' para más información.

Gunnar dijo...

Já, no aceptes explicaciones sin entenderlas ;-)

Respecto a lo que dice Thot: Cierto, y muy generalizable. «--» significa para casi todas las utilidades GNU «ya terminé de darte los switches, a continuación van los argumentos», entonces, ya no toma a «-rw» como un argumento.

Respecto a lo que dice anónimo... ¿Qué hacen las comillas invertidas? intentan ejecutar lo que tengan dentro, y te entregan el resultado de su ejecución. Afortunadamente tu anónimo no puso algo que resultara en que el resultado te diera «-rf .» ;-)

Pero bueno, más aún: Lo que él puso como comillas invertidas (´) no es una comilla invertida — Es un acento sobre de nada. Tú intentaste más adelante usar las comillas invertidas (y por eso te dio el «órden no encontrada»).