No se puede cambiar el nombre de un archivo cuyo nombre comienza con un guión

37

Estoy tratando de cambiar el nombre de un archivo con un guión al comienzo de su nombre y esto:

mv -example-file-name example-file-name

y esto:

mv '-example-file-name' example-file-name

resulta en:

mv: invalid option -- 'e'
Desmond Hume
fuente
1
Utilice la ruta relativa del archivo (./tmp/-example), la ruta completa (/ home / a / tmp / -example) o dígale a mv que ha terminado de dar opciones con - y que lo que sigue son archivos nombres
Ярослав Рахматуллин
En caso de que alguien se pregunte: mv *example-file-name example-file-nametiene el mismo problema, porque antes mvse llama a la expansión del nombre de archivo (AKA globbing) .
Walter Tross

Respuestas:

53

La mayoría de los comandos de GNU / Linux permiten que una --opción indique el final de las opciones para que las -palabras prefijadas posteriores no se traten como opciones.

  mv -- -example-file-name example-file-name

Una pequeña prueba

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
RedGrittyBrick
fuente
Esto también resuelve el mismo problema rename. (al menos la versión que funciona rename [options] <expression> <replacement> <file>..., cualquiera que sea)
underscore_d
Maldición, BSD / Mac OS X mvno tiene esto :(
Sridhar Sarnobat
18

La respuesta de RedGrittyBrick es muy buena. Otra opción es:

mv ./-example-file-name example-file-name

Una pequeña prueba:

$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example
gniourf_gniourf
fuente
muy buena solución, esto nunca se me ocurrió. Y a diferencia de la respuesta aceptada, esto funcionará en BSD / Mac OS X
Sridhar Sarnobat
Eso es un poco más pegadizo que --.
Corni
-1

Puedes usar esto:

rename -- "s/\-//g" *

que puede cambiar el nombre de todos los archivos :) si su nombre de archivo:

-ng--sh-ay-01[------------]-FLV

después de ejecutar el código, su nombre de archivo se convierte en:

ngshay01[]FLV
k-five
fuente
1
Los otros enfoques (el de RedGrittyBrick y gniourf_gniourf) tienen más probabilidades de funcionar con varios otros comandos.
TOOGAM
-1

Este truco me funciona en tiempos de desesperación. YMMV

rename \- '' *

Tienes que escapar del guión para cambiar el nombre para reconocerlo. Por qué renombrar no respeta comillas simples u ofrecer una anulación de algún tipo está fuera de mi alcance.

Este es el único método que he visto que maneja de manera confiable un guión inicial usando renombrar. Estoy de acuerdo con las otras publicaciones sobre el uso de mv, pero si no puede usar mv por alguna razón, esto funciona.

Alex Z
fuente