O comando mv confunde o nome do diretório com a opção de comando

12

Eu tenho um diretório chamado --pycache--, para o qual preciso mudar __pycache__. Usar o mvcomando da seguinte maneira, fornece a saída listada. Como posso usar o CLIpara fazer o que eu quero?

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

Respostas:

22

Esse é um problema padrão com nomes de arquivos / diretórios começando com símbolos menos convencionais. Seu problema é que o mv está tratando --pycache-- como nome da opção longa (desde que começa com -, também existem opções curtas, eles começam com -). Consulte a página de manual do getopt para obter detalhes sobre opções longas e curtas.

A solução padrão nessa situação é usar um traço duplo vazio - antes de todo argumento, que informa o comando (mv no seu caso, mas funcionará com outras pessoas, por exemplo, cp) para parar de tratar o que se segue como opções e tratá-lo como argumentos.

Assim, seu comando se tornará:

$ mv -- --pycache--/ __pycache__

e não falhará.

vtest
fonte
8
boa resposta, mas acho que você quer dizer - diz ao comando para parar de tratar o que se segue como opções e tratá-lo como argumentos, e não o contrário.
RoundTower 26/11/11
1
Eu acho que é mais portátil para prepend ./: mv ./--pycache-- __pycache__.
Kevin
3
@ Kevin Isso funciona apenas se o argumento for um nome de arquivo.
starblue
16

Seu primeiro caractere -é ambíguo para o mvcomando (ou melhor, significa inequivocamente que o nome de uma opção segue).

Tente isso:

mv ./--ppycache-- __pycache__

Fonte: linux.about.com

yms
fonte
2
+1 para solução alternativa que também funciona se o comando não suporta -
Sverre Rabbelier