Удалить файл с нечетным символом в имени файла

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

Во всяком случае, сегодня вот файл:

nas# ls -al
ls: cannot access Sécurité: No such file or directory
total 32
drwx------ 4 sambacam sambacam 20480 Jun  5 01:38 .
drwxr-xr-x 3 sambacam sambacam 12288 Jun  5 01:38 ..
d????????? ? ?        ?            ?            ? S??curit??
nas# cd S*
cd: 13: can't cd to Sécurité
nas# rm "Sécurité"
rm: cannot remove `S\303\251curit\303\251': No such file or directory
nas# rm S*
rm: cannot remove `S\303\251curit\303\251': No such file or directory
nas# 

Я даже попытался написать код на Python без успеха:

nas# python
Python 2.5.2 (r252:60911, Jan 24 2010, 20:48:41) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> d=os.listdir('.')
>>> d
['S\xc3\xa9curit\xc3\xa9']
>>> d[0]
'S\xc3\xa9curit\xc3\xa9'
>>> os.remove(d[0])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'S\xc3\xa9curit\xc3\xa9'
>>> 

Любая идея?

Я уже запустил fsck для проверки несоответствий.

2 ответа

Решение

Я думаю, что у вас проблемы хуже:

d????????? ? ?        ?            ?            ? S??curit??

Это означает, что ls(1) Не удалось найти разрешения, количество ссылок, владельца, группу, размер или время вашего файла. Все, что у него есть, это имя файла.

Это может произойти, если структура каталога указывает на файл, но индекс для этого файла пропал. Я бы надеялся fsck найдет его и очистит запись каталога, но если этого не произошло, вы не сможете очистить этот каталог в этой файловой системе. (Вы можете переместить его куда угодно, даже в /lost+foundи не надоедать ему снова...)

Возможно, debugfs(8) инструмент будет полезен в обучении больше?

Вы пробовали использовать трюк с номером инода? Делать:

ls -ilb

Первый номер в этом списке - номер индекса. -b переключатель делает ls Не пытайтесь печатать непечатные символы. Получив номер индекса из файла, попробуйте:

find . -inum the_number_from_above -exec rm -i {} \;

(Кстати: это кодировка UTF-8.)

Я не уверен, что это будет работать, хотя Дело в том, что ls не находит метаданные файла (метки времени и биты прав доступа) выглядит как повреждение файловой системы.

Другие вопросы по тегам