Команда mv плутає ім'я каталогу з параметром команди


12

У мене є названий каталог --pycache--, до якого мені потрібно перейти __pycache__. Використовуючи mvкоманду наступним чином, дає мені перерахований вихід. Як я можу використовувати те, CLIщоб робити те, що хочу?

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

Відповіді:


22

Це стандартний випуск із назви файлів / каталогів, починаючи з менш традиційних символів. Ваша проблема полягає в тому, що mv трактує --pycache-- як довгу назву опції (оскільки вона починається з -, є також короткі варіанти, вони починаються з -). Будь ласка , дивіться сторінку керівництва для Getopt отримання більш докладної інформації про довгих і коротких опцій.

Стандартним рішенням у цій ситуації є використання порожнього подвійного тире - перед усім аргументом, який повідомляє команду (mv у вашому випадку, але буде працювати з іншими, cp, наприклад), щоб припинити трактувати те, що випливає, як варіанти та розглянути це як аргументи.

Таким чином, ваша команда стане:

$ mv -- --pycache--/ __pycache__

і не підведе.


8
Хороша відповідь, але я думаю, ви маєте на увазі - говорить команді припинити трактувати те, що випливає, як варіанти, а трактувати це як аргументи, а не навпаки.
RoundTower

1
Я думаю , що це більш портативний препенд ./: mv ./--pycache-- __pycache__.
Кевін

3
@Kevin Це працює лише в тому випадку, якщо аргументом є ім'я файлу.
starblue

16

Ваш перший символ -є неоднозначним для mvкоманди (а точніше, це однозначно означає, що слідує назва опції).

Спробуйте це замість цього:

mv ./--ppycache-- __pycache__

Джерело: linux.about.com


2
+1 для альтернативного рішення, яке також працює, якщо команда не підтримує -
Sverre Rabbelier
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.