Если вы создаете файл в UNIX / Linux со специальными символами, например touch \"la*
, вы не можете удалить его с помощью rm "la*
. Вы должны использовать номер инода (вы можете, если вы добавите имя \
перед именем, я знаю, но вам, как пользователю, нужно угадать, что оно использовалось при создании файла).
Я проверил справочную страницу для rm, но там нет упоминания номера инода. Делать rm inodenumber
тоже не получается.
Какая команда для этого?
-xdev
опции, так как другие смонтированные файловые системы могут также иметь несвязанные файлы с тем же номером инода.Может быть, я что-то упустил, но ...
В любом случае, имена файлов не имеют inode, а файлы имеют. Попытка удалить файл без удаления всех имен файлов, которые указывают на него, повредит вашу файловую систему.
источник
Если вы действительно хотите это сделать - и ваш вариант использования на самом деле не выглядит так, как нужно, вы можете попробовать инструменты отладки файловой системы. Если вы готовы все потерять, то есть.
Например, для ext2 / 3/4
debugfs
команда имеет опцию «kill_file», которая, кажется, принимает inode. Как уже упоминалось в других ответах, это будет повредить вашу файловую систему, как будет записей каталога , указывающих на несуществующий файл. Запускfsck
после может быть в состоянии исправить это. Вряд ли вы можете сделать это в смонтированной файловой системе.Но я настоятельно рекомендую вам просто использовать соответствующее экранирование / цитирование и удалять такие файлы с помощью обычной
rm
команды, как было упомянуто в предыдущем ответе, - и использоватьrm -i
для дополнительной безопасности при работе с именами файлов, содержащими символы перетаскивания, такие как *источник
Несмотря на то, что я настоятельно рекомендую подход «экранировать специальные символы», всегда есть
clri
команда, когда вы действительно хотите исправить повреждения файловой системы.источник
clri
обычно присутствует только в системах Oracle (например, SunOS).Вы можете удалить файлы, начинающиеся с тире, позвонив
rm -- filename
.источник
Проблема, с которой я столкнулся, заключалась в удалении имени файла, начинающегося с тире - rm всегда хочет интерпретировать его как имя хоста. Я решил это с помощью:
источник