13

Если вы создаете файл в UNIX/Linux со специальными символами, такими как touch \"la* , вы не можете удалить его с помощью rm "la* . Вы должны использовать номер инода (вы можете, если вы добавите \ перед именем, я знаю, но вам, как пользователю, нужно угадать, что он использовался при создании файла).

Я проверил man-страницу для rm, но там нет упоминания номера инода. Выполнение rm inodenumber тоже не работает.

Какая команда для этого?

6 ответов6

22

Некоторые другие методы включают в себя:

избегая специальных символов:

[~]$rm \"la\*

используйте команду find и ищите только текущий каталог. Команда find может искать номера инодов и имеет удобный -delete :

[~]$ls -i
7404301 "la*

[~]$find . -maxdepth 1 -type f -inum 7404301
./"la*

[~]$find . -maxdepth 1 -type f -inum 7404301 -delete
[~]$ls -i
[~]$
6

Может быть, я что-то упустил, но ...

rm '"la*'

В любом случае, имена файлов не имеют inode, а файлы имеют. Попытка удалить файл без удаления всех имен файлов, которые указывают на него, повредит вашу файловую систему.

5

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

Например, для ext2/3/4 команды debugfs имеет опцию "kill_file" , который , кажется, взять инод. Как уже упоминалось в других ответах, это приведет к повреждению файловой системы, так как будет записей каталога , указывающих на несуществующий файл. Запуск fsck впоследствии может исправить это. Вряд ли вы можете сделать это в смонтированной файловой системе.

Но я настоятельно рекомендую вам просто использовать соответствующее экранирование / цитирование и удалять такие файлы с помощью обычной команды rm как было упомянуто в предыдущем ответе, и использовать rm -i для дополнительной безопасности при работе с именами файлов, содержащими такие символы как *

1

Несмотря на то, что я настоятельно рекомендую подход "экранировать специальные символы", всегда есть команда clri когда вы действительно хотите исправить повреждения файловой системы.

1

Вы можете удалить файлы, начинающиеся с тире, вызвав rm -- filename .

0

Проблема, с которой я столкнулся, заключалась в удалении имени файла, начинающегося с дефиса - rm всегда хочет интерпретировать его как имя хоста. Я решил это с помощью:

rm ./-g4xxx

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