Удалить все файлы, имена которых начинаются с одинарной кавычки

Удалить все файлы, имена которых начинаются с одинарной кавычки

Мне нужно удалить все файлы с такими именами (кавычки являются частью имени):

'index.html?some-query-string'

Я пробовал с:

rm \'index.html?*\'

Я получаю эту ошибку:

rm: cannot remove ''\''index.html?*'\''': No such file or directory

решение1

Анализ

кавычки являются частью имени

Ты уверен? Откуда ты знаешь? Есть это«особенность» современного GNUls, поэтому он печатает имена с дополнительными кавычками, где есть символы ?внутри; поэтому, когда полный профан скопирует-вставит 'index.html?some-query-string'и запустит eg rm 'index.html?some-query-string', то это будет правильная безопасная команда.

К сожалению, это может сбить с толку более опытных пользователей, которые знают, что им следует заключать в кавычки/экранировать некоторые символы. Ваша rmкоманда ( rm \'index.html?*\') подходит для имени с кавычками. Она может соответствовать большему количеству имен файлов, поскольку ?*является шаблоном glob; я предполагаю, что это то, что вам нужно, поскольку вы написали «Мне нужно удалить все файлы». Тот факт, что команда дала вам, No such file or directoryзаставляет меня думать, что существующие имена действительно отличаются.

Чтобы подтвердить это, запустите ls -N. Если эта команда выполняется успешно и выводит имена вродеindex.html?some-query-string без кавычекзатемэтинастоящие имена.


Решение

Эта часть ответа предполагает, lsчто у вас современный GNU lsили аналогичный «умный» компьютер, поэтому рассматриваемые кавычки не относятся к имени файла.

Чтобы удалить определенный файл, действуйте как полный профан, который видит 'index.html?some-query-string'в выводе "smart" ls, или как пользователь, понимающий необходимость цитирования (я полагаю, что вы такой и есть), который видит index.html?some-query-stringв выводе ls -N. Выполните:

rm 'index.html?some-query-string'

Или если вы хотите удалить все файлы с именами, начинающимися с index.html?:

rm 'index.html?'*

Оболочка удалит кавычки, они не попадут в rm. Одинарные кавычки ?не будут рассматриваться как подстановочный знак, они будут переданы в rmбуквальном смысле. Незаключенные в кавычки *будут рассматриваться как подстановочный знак, они будут соответствовать любой строке запроса, оболочка передаст возможно несколько совпадающих имен файлов в качестве аргументов в rm.

решение2

Если 'является частью имени ваших файлов, я рекомендую использовать команду find вместе с " "передачей шаблона имени для вашей команды.

Вот пример, который вы можете использовать:

find . -maxdepth 1 -type f -name "'index.html?*'" -exec rm {} \;

Связанный контент