Как выполнять операции над файлами или каталогами с тире или дефисами?
У меня вопрос, что я пытался переименовать файл с именем 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
).