Как удалить файл со странным именем?

33

Я написал программу, которая использует функцию отображения памяти POSIX ( mmap)

Программа берет файл ( a.dat) и отображает его в памяти для чтения / записи.

Из-за ошибок в программе, каждый раз, когда я запускаю программу, создается файл с некоторыми странными именами (например, ?d?P?^z??d?P?^z?). Ошибка устранена, но я не могу удалить файлы.

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

Так как мне его удалить? Я использую Ubuntu 11.04.

Аляска
источник
1
Даже если вы не можете легко ввести имя файла, удаление его из графического файлового менеджера должно работать нормально. Какую ошибку вы получаете?
Томас
2
@ Aditya, у меня нет проблем с удалением таких файлов из командной строки при экранировании их имен одинарными кавычками ( rm '?d?P?^z??d?P?^z?'). Вы пробовали это?
Фредерик Хамиди
удаление из графического менеджера окон просто говорит, что не может удалить файл «имя файла». @ Фредерик Хамиди Спасибо, что помог мне удалить один файл. Но другой с именем «? M? P ???)? M? P ???)» не удаляется ... Сообщение об ошибке гласит: «rm: невозможно удалить`? M? P ???)? M ? P ???) ': Нет такого файла или каталога "
АК
1
@Aditya, этот другой файл должен иметь непечатаемые символы в своем имени. Попробуйте выполнить следующие действия: 1 / Переместите все допустимые файлы из этой папки, 2 / Issue rm *внутри папки.
Фредерик Хамиди
1
При вводе имени файла попробуйте начать с кавычек, затем используйте автозаполнение, как только оно заработает (после одного или двух символов). Автоматическое завершение будет нажатием клавиши [tab], чтобы оболочка автоматически заполнила имя. Таким образом, вы могли бы быть более успешным, чтобы правильно избежать имен.

Ответы:

45

rm -i -- *предложит вам удалить каждый файл. Вы можете и должны поменять '*' на более узкое соответствие, если файлов много. --Останавливает обработку опций, так что файл с именем -dбудет удален rmуспешно.

Я использовал это в прошлом, и это работает, пока вы не нажмете специальный символ или 2, которые ему не нравятся.

JimR
источник
1
Это не работает для файла с именем -d, например.
ШОС
2
@SCO Если это не работает для вас и, в зависимости от вашей версии rm, вы можете выполнить команду rm -i -- * The, которая --сообщает некоторым версиям rm, что больше нет переключателей командной строки после --и, чтобы обрабатывать дальнейшие аргументы как имена файлов.
JimR
1
Я думаю, что этот ответ должен включать комментарий, предложенный @JimR: Использование --в rmкоманде.
Фелипе Альварес
16

Вы можете использовать, ls -liчтобы показать все файлы по их иноду. Затем выполните эту команду, чтобы удалить файл:

find . -inum ${INODE_NUM} -delete

Я добавил -maxdepth 1в свою находку просто для безопасности:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
Фелипе Альварес
источник
1
Строго говоря, ls -iэто достаточно хорошо.
Скотт
lsне удаляет файлы ОП хочет этого.
Фелипе Альварес
4
Первая строка вашего ответа гласит: «Вы можете использовать, ls -liчтобы показать все файлы по их иноду». Я отмечаю, что этого ls -iдостаточно, чтобы получить список имен файлов и их соответствующих номеров инодов. (Но, конечно, вам нужно, ls -iaесли вы хотите включить точечные файлы.)
Скотт
Лучше просто передать -deleteпараметр find, чтобы минимизировать использование неправильного имени файла.
ScumCoder