7

Возможный дубликат:
Удаление файла со странными символами в имени файла в OS X

У меня есть папка, в которой есть файл с именем «Иконки», который заканчивается дополнительным непечатным символом. Я могу увидеть непечатный, если я ls с опцией -B:

$ ls -B
$ Icon\015

если я использую ls -b, я получаю:

$ ls -b
$ Icon\r

Я хотел бы удалить файл, но не могу найти способ напечатать непечатный символ. Если я сделаю:

$ rm Icon\015

Я получил:

$ Icon\015: No such file or directory

Если я сделаю:

$ rm Icon\r

Я получил:

$ Icon\r: No such file or directory

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

3 ответа3

3

Оболочка автоматически преобразует каждый CR (\r) в LF (\n) и выполняет предыдущую команду. Однако вы можете использовать echo для создания символа LF. Все это должно работать:

rm $(echo -e "Icon\r")

rm $(echo -e "Icon\015")

echo -e "Icon\r" | xargs rm

echo -en "Icon\r" | xargs -0 rm

Последний вариант должен быть достаточно надежным и иметь дело со всеми возможными странными персонажами.

2

Есть несколько способов включить непечатные символы в командной строке. Самый простой (только для bash) вариант - использовать $ перед строкой в одинарных кавычках, что заставляет bash избежать экранирования внутри строки. Обратите внимание, что он обрабатывает несколько видов escape-последовательностей, поэтому оба они будут работать:

rm $'Icon\r'
rm $'Icon\015'

Или вы можете набрать Control-V перед Control-M (он же return), что говорит оболочке «следующий символ, который я ввожу, должен быть включен буквально в команду»:

rm Icon^V^M

(Обратите внимание, что ^ V на самом деле не является частью команды, поэтому он не будет отображаться в командной строке).

0

Для одного непечатаемого символа вы можете использовать '?в качестве символа подстановки для одного персонажа. Итак, abc?def?.zip будет означать abc1def2.zip, а также abc!Защита # .zip.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .