Как выполнять операции над файлами или каталогами с тире или дефисами?

У меня вопрос, что я пытался переименовать файл с именем 12F-XYZ.pdf в 13F-XYX_ABX.pdf,

Теперь возникает проблема, заключающаяся в том, что как дефис, так и искомые имена содержат дефисы. Я знаю, что для пробелов мы используем \ чтобы преодолеть проблему, но что мы можем сделать в случае дефиса или любого другого символа, который на самом деле может вызвать проблему, подобную этой, не только командой переименования, но и любой другой командой.

1 ответ

Решение

Как отметил "Дэвид Фёрстер", дефис (-) специально не обрабатывается оболочкой. Итак, что касается вашего примера, вы можете просто сделать:

mv 12F-XYZ.pdf 13F-XYX_ABX.pdf

Но если у вас есть пробел или буквальный escape-символ (обратная косая черта) или любой другой, который необходимо экранировать, вы можете избежать экранирования с помощью escape-символа, т.е. \ или поместите все имя в кавычки '' так что содержимое внутри кавычек трактуется буквально.

Вот пример:

mv 12F-XYZ.pdf 50M -XYZ.pdf  ##Wrong
mv 12F-XYZ.pdf 50M\ -XYZ.pdf  ##Right
mv 12F-XYZ.pdf '50M -XYZ.pdf'  ##Right

Эмпирическое правило было бы избежать этого, когда вы сомневаетесь. Это было бы очень хорошим чтением для вас.

РЕДАКТИРОВАТЬ: Как 'Муру' указал, что у вас будут проблемы в случае ведущего дефиса. В этом случае вы можете использовать любой из следующих:

mv -- foo.bar -foo.bar
mv foo.bar ./-foo.bar

-- указывает конец переключателя для предыдущей команды (в этом случае mv). Также обратите внимание, что не все команды поддерживают -- так что вам лучше использовать второй вариант (./-foo.bar).

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