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--/'

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.


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


2
+1 für alternative Lösung, die auch funktioniert, wenn der Befehl nicht unterstützt -
Sverre Rabbelier
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.