la commande mv confond le nom du répertoire avec l'option de commande

12

J'ai un répertoire appelé --pycache--, vers lequel je dois aller __pycache__. L'utilisation de la mvcommande de la manière suivante me donne la sortie répertoriée. Comment puis-je utiliser le CLIpour faire ce que je veux?

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

Réponses:

22

Il s'agit d'un problème standard avec les noms de fichiers / répertoires commençant par des symboles moins conventionnels. Votre problème est que mv traite --pycache-- comme un nom d'option long (car il commence par -, il y a aussi des options courtes, ils commencent par -). Veuillez consulter la page de manuel pour getopt pour plus de détails sur les options longues et courtes.

La solution de contournement standard dans cette situation consiste à utiliser un double tiret vide - avant tout argument, qui indique à la commande (mv dans votre cas, mais fonctionnera avec d'autres, cp par exemple) d'arrêter de traiter ce qui suit comme des options et de le traiter comme arguments.

Ainsi, votre commande deviendra:

$ mv -- --pycache--/ __pycache__

et n'échouera pas.

vtest
la source
8
bonne réponse mais je pense que vous voulez dire - indique à la commande d'arrêter de traiter ce qui suit comme des options et de le traiter comme des arguments, et non l'inverse.
RoundTower
1
Je pense qu'il est plus facile à transporter préfixer ./: mv ./--pycache-- __pycache__.
Kevin
3
@Kevin Cela ne fonctionne que si l'argument est un nom de fichier.
starblue
16

Votre premier caractère -est ambigu pour la mvcommande (ou plutôt, cela signifie sans ambiguïté qu'un nom d'option suit).

Essayez plutôt ceci:

mv ./--ppycache-- __pycache__

Source: linux.about.com

yms
la source
2
+1 pour une solution alternative qui fonctionne également si la commande ne prend pas en charge -
Sverre Rabbelier