Eine Datei, deren Name mit einem Bindestrich beginnt, kann nicht umbenannt werden

37

Ich versuche, eine Datei mit einem Bindestrich am Anfang ihres Namens umzubenennen, und beides:

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

und das:

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

Ergebnis in:

mv: invalid option -- 'e'
Desmond Hume
quelle
1
Verwenden Sie entweder den relativen Pfad der Datei (./tmp/-example), den vollständigen Pfad (/ home / a / tmp / -example) oder teilen Sie mv mit, dass Sie mit der Angabe von Optionen fertig sind - und dass es sich bei den folgenden Angaben um Dateien handelt Namen.
Ярослав Рахматуллин
Falls sich jemand wundert: mv *example-file-name example-file-namehat das gleiche Problem, da die Dateinamenerweiterung (AKA Globbing) vor dem mvAufruf erfolgt.
Walter Tross

Antworten:

53

Die meisten GNU / Linux-Befehle erlauben eine --Option, um das Ende von Optionen anzugeben, so dass nachfolgende -vorangestellte Wörter nicht als Optionen behandelt werden.

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

Ein kleiner Test

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
RedGrittyBrick
quelle
Dies löst das gleiche Problem auch für rename. (Zumindest die Version, die funktioniert rename [options] <expression> <replacement> <file>..., egal welche.)
underscore_d
Verdammt, BSD / Mac OS X hat mvdies nicht :(
Sridhar Sarnobat
18

Die Antwort von RedGrittyBrick ist sehr gut. Eine andere Option ist:

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

Ein kleiner 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
gniourf_gniourf
quelle
Sehr nette Abhilfe, das ist mir noch nie in den Sinn gekommen. Und im Gegensatz zur akzeptierten Antwort funktioniert dies unter BSD / Mac OS X
Sridhar Sarnobat,
Das ist ein bisschen eingängiger als --.
Corni
-1

Sie können dies verwenden:

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

dass es alle dateien umbenennen kann :) wenn dein dateiname:

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

Nach dem Ausführen des Codes wird Ihr Dateiname zu:

ngshay01[]FLV
k-five
quelle
1
Die anderen Ansätze (der von RedGrittyBrick und gniourf_gniourf) funktionieren eher mit mehreren anderen Befehlen.
TOOGAM
-1

Dieser Trick funktioniert für mich in Zeiten der Verzweiflung. YMMV

rename \- '' *

Sie müssen den Bindestrich umbenennen, um ihn zu erkennen. Warum das Umbenennen keine einfachen Anführungszeichen berücksichtigt oder eine Überschreibung anbietet, ist mir ein Rätsel.

Dies ist die einzige Methode, die ich gesehen habe und die einen führenden Bindestrich mithilfe von Umbenennung zuverlässig verarbeitet. Ich bin mit den anderen Beiträgen über die Verwendung von mv einverstanden, aber wenn Sie mv aus irgendeinem Grund nicht verwenden können, funktioniert dies.

Alex Z
quelle