Синтаксическая ошибка в разбивке имен файлов, содержащих тире в zsh
Когда я бегу mdls -name kMDItemFSName -name kMDItemDateAdded -raw *
в zsh в папке, содержащей каталог - Java Code
Я получаю следующую ошибку:
mdls: unrecognized option `- Java Code'
Как я могу это исправить? Я пытался с помощью "*"
, но это совсем не было
1 ответ
Проблема из-за -
вариант в одном из каталогов. Обычно флаги командной строки задаются после -
, Имя папки как -Java Code
рассматривается как один из таких флагов mdls
команда, которая ему не нравится. Обычно мы предоставляем разделитель флагов конца командной строки, предоставляя --
после чего оболочка понимает, что больше не ожидается никаких флагов командной строки.
mdls -name kMDItemFSName -name kMDItemDateAdded -raw -- *
Таким образом, так как мы сигнализировали, что флаги командной строки сделаны, имя папки, содержащее ведущий -
должен быть разобран правильно.
Проблема часто возникает и может быть просто воспроизведена простым mv
команда и создание файла, содержащего -
и при попытке переместить файл, команда потерпит неудачу. Это нужно исправить, выполнив mv --
Большинство встроенных команд оболочки и инструментов GNU поддерживают эту опцию. Также POSIX рекомендует это тоже. Смотрите это из одного из их руководящих принципов. См. Соглашения POSIX Utility - Рекомендация 10