Impossibile rinominare un file il cui nome inizia con un trattino


37

Sto cercando di rinominare un file con un trattino all'inizio del suo nome ed entrambi:

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

e questo:

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

risulta in:

mv: invalid option -- 'e'

1
O usa il percorso relativo del file (./tmp/-example), il percorso completo (/ home / a / tmp / -example) o dì a mv che hai finito di dare opzioni con - e che ciò che segue sono file nomi.
Ярослав Рахматуллин,

Nel caso qualcuno si chieda: mv *example-file-name example-file-nameha lo stesso problema, perché l'espansione del nome file (globbing AKA) avviene prima che mvvenga chiamato.
Walter Tross,

Risposte:


53

La maggior parte dei comandi GNU / Linux consente --un'opzione per indicare la fine delle opzioni in modo che le successive -parole con prefisso non vengano trattate come opzioni.

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

Un piccolo test

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$

Questo risolve anche lo stesso problema rename. (almeno la versione che funziona come rename [options] <expression> <replacement> <file>..., qualunque sia.)
underscore_d

Accidenti, BSD / Mac OS X mvnon ha questo :(
Sridhar Sarnobat,

18

La risposta di RedGrittyBrick è molto buona. Un'altra opzione è:

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

Un piccolo test:

$ 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

soluzione molto bella, questo non mi è mai venuto in mente. E a differenza della risposta accettata, questo funzionerà su BSD / Mac OS X
Sridhar Sarnobat,

Questo è un po 'più accattivante di --.
Corni,

-1

Puoi usare questo:

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

che può rinominare tutti i file :) se il nome del tuo file:

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

dopo l'esecuzione del codice, il nome del tuo file diventa:

ngshay01[]FLV

1
Gli altri approcci (quello di RedGrittyBrick e gniourf_gniourf) hanno maggiori probabilità di funzionare con molti altri comandi.
TOOGAM il

-1

Questo trucco funziona per me in tempi di disperazione. YMMV

rename \- '' *

Devi scappare dal trattino per rinominarlo per riconoscerlo. Perché rinominare non rispetti le virgolette singole o offrire una sostituzione di qualche tipo è oltre me.

Questo è l'unico metodo che ho visto che gestisce in modo affidabile un trattino iniziale usando rinomina. Sono d'accordo con gli altri post sull'uso di mv, ma se non puoi usare mv per qualsiasi motivo, questo funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.