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--/'
user81557
źródło

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.

vtest
źródło
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

yms
źródło
2
+1 za alternatywne rozwiązanie, które działa również, jeśli polecenie nie obsługuje -
Sverre Rabbelier