polecenie mv myli nazwę katalogu z opcją polecenia


12

Mam katalog o nazwie --pycache--, do którego muszę się przenieść __pycache__. Użycie mvpolecenia w następujący sposób daje mi wymienione dane wyjściowe. Jak mogę wykorzystać CLIto, co chcę?

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

Odpowiedzi:


22

Jest to standardowy problem z nazwami plików / katalogami zaczynającymi się od mniej konwencjonalnych symboli. Problem polega na tym, że mv traktuje --pycache - jako długą nazwę opcji (ponieważ zaczyna się od -, są też krótkie opcje, zaczynają się od -). Szczegółowe informacje na temat długich i krótkich opcji można znaleźć na stronie man dla getopt .

Standardowym obejściem w tej sytuacji jest użycie pustego podwójnego myślnika - przed wszystkimi argumentami, które nakazują komendzie (mv w twoim przypadku, ale będzie działać z innymi, na przykład cp), aby przestał traktować to, co następuje, jako opcje i traktował to jako argumenty.

W ten sposób twoje polecenie stanie się:

$ mv -- --pycache--/ __pycache__

i nie zawiedzie.


8
dobra odpowiedź, ale myślę, że masz na myśli - nakazuje komuś, aby przestał traktować to, co następuje, jako opcje i traktował to jako argument, a nie na odwrót.
RoundTower

1
Myślę, że to bardziej przenośne do prepend ./: mv ./--pycache-- __pycache__.
Kevin

3
@Kevin Działa to tylko wtedy, gdy argument jest nazwą pliku.
starblue

16

Twój pierwszy znak -jest niejednoznaczny dla mvpolecenia (a raczej jednoznacznie oznacza, że ​​następuje nazwa opcji).

Spróbuj zamiast tego:

mv ./--ppycache-- __pycache__

Źródło: linux.about.com


2
+1 za alternatywne rozwiązanie, które działa również, jeśli polecenie nie obsługuje -
Sverre Rabbelier
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.