Команда mv путает имя каталога с параметром команды

12

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

$ mv --pycache-- __pycache__
/bin/mv: unrecognized option '--pycache--/'
user81557
источник

Ответы:

22

Это стандартная проблема с именами файлов / каталогов, начинающимися с менее условных символов. Ваша проблема в том, что mv рассматривает --pycache-- как длинное имя опции (так как оно начинается с -, есть также короткие опции, они начинаются с -). Пожалуйста, смотрите man-страницу для getopt для получения подробной информации о длинных и коротких опциях.

Стандартный обходной путь в этой ситуации заключается в использовании пустого двойного тире - перед всем аргументом, который говорит команде (mv в вашем случае, но будет работать с другими, например, cp) прекратить обрабатывать то, что следует, как опции и рассматривать это как аргументы.

Таким образом, ваша команда станет:

$ mv -- --pycache--/ __pycache__

и не подведет.

VTEST
источник
8
хороший ответ, но я думаю, что вы имеете в виду - приказывает команде прекратить трактовать то, что следует, как опции, и рассматривать это как аргументы, а не наоборот.
RoundTower
1
Я думаю , что это более портативный препенд ./: mv ./--pycache-- __pycache__.
Кевин
3
@Kevin Это работает, только если аргумент является именем файла.
звездный синий
16

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

Попробуйте это вместо этого:

mv ./--ppycache-- __pycache__

Источник: linux.about.com

YMS
источник
2
+1 за альтернативное решение, которое также работает, если команда не поддерживает -
Сверре Раббелье 6