2011-06-05 2 views
2

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

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

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, чтобы проверить несоответствия.

+0

Тип FS - ext2! – CamilleHuot

+0

Какой у вас язык? Попробуйте использовать UTF-8 (это единственный способ сохранить работоспособность). –

+0

Мой локаль POSIX и UTF8 не установлены на моем компьютере. Возможно, вы правы, проблема с именем файла может быть исправлена. – CamilleHuot

ответ

5

Я думаю, что у вас есть более серьезные проблемы:

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

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

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

Возможно, инструмент debugfs(8) был бы полезен для изучения еще?

+0

На данный момент я выбрал ваше замечательное решение для перемещения каталога в lost + found. Вы знаете, как я могу использовать debugfs, чтобы увидеть/исправить проблему? – CamilleHuot

+0

@ Camille, я неохотно предлагаю что-либо, только потому, что это может сделать вашу fs-коррупцию намного худшей. У вас есть резервные копии. :) Это говорит о том, что вы можете использовать команду 'cd' для перехода к правильному каталогу. Что происходит дальше, это немного азартная игра: если вы используете 'rm', он попытается де-выделить индексный дескриптор после отмены записи в каталоге. Кажется опасным. Если вы используете 'unlink', это просто отключит запись в каталоге и выйдет из inode. (Это, вероятно, более безопасный выбор.) Но опять же, я не могу подчеркнуть значимость резервных копий достаточно сильно. :) – sarnold

3

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

ls -ilb 

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

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

(BTW: это UTF-8 кодирование.)

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

+1

Отличный трюк :) – sarnold

+0

Я не понимаю, как эта помощь. 'nas # ls -ibl ls: невозможно получить доступ к S \ 303 \ 251curit \ 303 \ 251: Нет такого файла или каталога всего 0 36626459 d ????????? ? ? ? ? ? S \ 303 \ 251curit \ 303 \ 251 nas # find. -inum 36626459 -exec rm -i {} \; найти: './ S \ 303 \ 251curit \ 303 \ 251 ': Нет такого файла или каталога nas # ' – CamilleHuot

+1

Ну, в этом случае кажется, что это происходит не потому, что ваш FS выглядит поврежденным. Это помогает в некоторых случаях, когда вы не можете получить имя файла, принятое чем угодно, более обычными способами. – Mat

Смежные вопросы