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'

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
$

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.