Синтаксическая ошибка в разбивке имен файлов, содержащих тире в 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

Другие вопросы по тегам