Як видалити файл із дивним іменем?


33

Я написав програму, яка використовує функцію відображення пам'яті POSIX ( mmap)

Програма бере файл ( a.dat) і пам'ять-карти для читання / запису.

Через помилки в програмі щоразу, коли я запускаю програму, створюється файл з деякими дивними іменами (наприклад, ?d?P?^z??d?P?^z?). Помилка усунена, але я не в змозі видалити файли.

Я не в змозі видалити його ні за допомогою командного рядка, ні шляхом вибору / видалення з менеджера вікон.

То як я можу її видалити? Я використовую Ubuntu 11.04.


1
Навіть якщо ви не можете легко ввести ім'я файлу, його видалення з графічного файлового менеджера повинно працювати нормально. Яку помилку ви отримуєте?
Томас

2
@Aditya, у мене немає проблем із видаленням таких файлів з командного рядка, коли уникають їх імен за допомогою єдиних лапок ( rm '?d?P?^z??d?P?^z?'). Ви пробували це?
Фредерік Хаміді

видалення з графічного менеджера вікон просто говорить, що не можна видалити файл "ім'я файлу". @ Frédéric Hamidi Дякую за допомогу мені видалити один файл. Але інший з ім'ям "? M? P ???)? M? P ???)" не видаляється ... Повідомлення про помилку говорить "rm: не можна видалити`? M? P ???)? M ? P ???) ': Немає такого файлу чи каталогу "
AK

1
@Aditya, цей інший файл повинен містити символи, які не можна роздрукувати. Спробуйте виконати наступні дії: 1 / Перемістіть усі дійсні файли з цієї папки, 2 / Випустіть rm *всередині папки.
Фредерік Хаміді

1
Набираючи ім'я файлу, спробуйте почати з лапок, а потім використовуйте автоматичне завершення, як тільки воно працює (після одного або двох символів). Автоматичне завершення буде натискати клавішу [вкладку], щоб оболонка автоматично заповнила ім'я. Таким чином вам може бути успішніше правильно втекти імена.

Відповіді:


45

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

Я раніше це використовував, і це працює, поки ти не потрапиш у спеціальний персонаж або 2, що йому не подобається.


1
Це не працює для файлу з назвою -d, наприклад.
ШОС

2
@SCO Якщо це не працює для вас, і залежно від вашої версії rm, ви можете зробити. rm -i -- * Повідомляє --деякі версії rm, що після перемикання командного рядка більше немає перемикачів командного рядка, --і подати аргументи як імена файлів.
JimR

1
Я думаю, що ця відповідь повинна містити коментар, запропонований @JimR: Використання --в rmкоманді.
Феліпе Альварес

16

ви можете використовувати ls -liдля показу всіх файлів за їх inode. Потім запустіть цю команду, щоб видалити файл:

find . -inum ${INODE_NUM} -delete

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

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
Строго кажучи, ls -iдосить добре.
Скотт

lsне видаляє файли. ОП хоче цього.
Феліпе Альварес

4
Перший рядок вашої відповіді говорить: «Ви можете використовувати ls -liдля показу всіх файлів за їх inode». Я вказую, що ls -iце досить добре, щоб отримати список імен файлів та їх відповідні номери. (Але, звичайно, вам потрібно, ls -iaякщо ви хочете включити точкові файли.)
Скотт

Краще просто передати цю -deleteопцію find, щоб мінімізувати використання неправильного імені файлу.
ScumCoder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.