Удалить файл с нечетным символом в имени файла - PullRequest
2 голосов
/ 05 июня 2011

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

В любом случае, сегодня файл:

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 ]

5 голосов
/ 05 июня 2011

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

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

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

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

Возможно, инструмент debugfs(8) будет полезен для получения дополнительной информации?

3 голосов
/ 05 июня 2011

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

ls -ilb

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

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

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

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

...