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


12

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

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

Ответы:


22

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

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

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

$ mv -- --pycache--/ __pycache__

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


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

1
Я думаю , что это более портативный препенд ./: mv ./--pycache-- __pycache__.
Кевин

3
@Kevin Это работает, только если аргумент является именем файла.
звездный синий

16

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

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

mv ./--ppycache-- __pycache__

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


2
+1 за альтернативное решение, которое также работает, если команда не поддерживает -
Сверре Раббелье 6
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.