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

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.


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


2
+1 pour une solution alternative qui fonctionne également si la commande ne prend pas en charge -
Sverre Rabbelier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.