Der Befehl mv verwechselt den Verzeichnisnamen mit der Befehlsoption

12

Ich habe ein Verzeichnis namens --pycache--, in das ich wechseln muss __pycache__. Wenn Sie den mvBefehl folgendermaßen verwenden, erhalte ich die aufgelistete Ausgabe. Wie kann ich mit dem CLImachen, was ich will?

$ mv --pycache-- __pycache__
/bin/mv: unrecognized option '--pycache--/'
user81557
quelle

Antworten:

22

Dies ist ein Standardproblem bei Dateinamen / Verzeichnissen, die mit weniger herkömmlichen Symbolen beginnen. Ihr Problem ist, dass mv --pycache-- als langen Optionsnamen behandelt (da es mit - beginnt, gibt es auch kurze Optionen, die mit - beginnen). Weitere Informationen zu langen und kurzen Optionen finden Sie in der Manpage für getopt .

Die Standardumgehung in dieser Situation besteht darin, einen leeren doppelten Bindestrich zu verwenden - vor allen Argumenten, der den Befehl (in Ihrem Fall mv, funktioniert aber mit anderen, z. B. cp) anweist, das Folgende nicht mehr als Optionen zu behandeln und als zu behandeln Argumente.

So wird Ihr Befehl:

$ mv -- --pycache--/ __pycache__

und wird nicht scheitern.

vtest
quelle
8
Gute Antwort, aber ich denke, Sie meinen - fordert den Befehl auf, das Folgende nicht mehr als Optionen zu behandeln und es als Argumente zu behandeln, nicht umgekehrt.
RoundTower
1
Ich denke, es ist tragbarer, vorangestellt zu werden ./: mv ./--pycache-- __pycache__.
Kevin
3
@ Kevin Das funktioniert nur, wenn das Argument ein Dateiname ist.
Starblue
16

Ihr erstes Zeichen -ist für den mvBefehl nicht eindeutig (oder bedeutet eindeutig, dass ein Optionsname folgt).

Versuchen Sie stattdessen Folgendes:

mv ./--ppycache-- __pycache__

Quelle: linux.about.com

yms
quelle
2
+1 für alternative Lösung, die auch funktioniert, wenn der Befehl nicht unterstützt -
Sverre Rabbelier