Удалить поврежденный файл в Linux

Удалить поврежденный файл в Linux

Как удалить этот файл? Я думаю, что это поврежденный файл в файловой системе VFAT.

?????????  ? ?       ?        ?            ? 100.jpg

решение1

Одна из возможностей — узнать номер inodeфайла, что можно сделать, запустив ls -i. Это вернет два столбца: первый — это инод, а второй — имя файла. Затем вы можете использовать команду, findчтобы выбрать только файл с этим конкретным инодом и удалить его.

sh-4.1$ ls -i .
  17921 somefile.ods
    169 someotherfile.conf
    305 -????????? ? ? ? ? ? 100.jpg
  18048 yetanotherfile.jpg

sh-4.1$ find . -maxdepth 1 -inum 305 -ok rm '{}' \;
< rm ... -????????? ? ? ? ? ? 100.jpg > ? y

Поскольку inode, скорее всего, уникален для файла (при условии отсутствия жестких ссылок), это позволит вам удалить его без рисков, присущих подстановочным знакам. Параметры maxdepthи okкоманды find просто делают еще менее вероятным случайное попадание не на тот файл.

решение2

Я не уверен, что какой-либо из ответов здесь действительно имел проблему, о которой сообщил Стиг. Я только что сам столкнулся с этой проблемой на своей файловой системе ext4:

# ls -l /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
total 0
?????????? ? ? ? ?            ? easy-rsa-master

# ls -i /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
? easy-rsa-master

# rm -r /tmp/dependencies
rm: descend into directory ‘dependencies’? y
rm: cannot remove ‘/tmp/dependencies/easy-rsa-master’: No such file or directory
rm: remove directory ‘dependencies’? y
rm: cannot remove ‘dependencies’: Directory not empty

Сам файл был поврежден вместе с его атрибутами. ls -i явно не показывает идентификатор инода. Никакое использование rm не поможет. Даже rm -rf переходит в каталог и пытается удалить файл напрямую (и молча).

Мое решение состояло в том, чтобы заново создать каталог без проблемного файла. Затем вы можете переместить каталог в другое место, например, /tmp. Он исчезнет после перезагрузки или всякий раз, когда ваш дистрибутив очистит каталог /tmp (надеюсь).

решение3

Я бы рекомендовал немного более оборонительную версию предложения cHao:

rm -i ./*100.jpg*

Makes -iспрашивает rmвас, следует ли удалять каждый файл, который соответствует подстановочному знаку; это гарантирует, что вы случайно не удалите другие файлы. А лидирование ./гарантирует, что все имена файлов будут рассматриваться какимена файлови никаких дополнительных опций rm(судя по всему, там есть начальный дефис, вот почему это важно).

Кстати, возможно, что есть невидимые персонажи.внутристрока "100.jpg". Если вышеприведенное сообщение об ошибке выглядит как " rm: ./*100.jpg*: not found", вот почему. ls -1fw | cat -vможет быть полезным.

решение4

Вы можете попробовать

rm *100.jpg*

? — это либо буквальные вопросительные знаки, либо символы, которые не имеют смысла. В любом случае, сама ОС (и оболочка) обычно может удалить файл, если файловая система не забита.

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

Связанный контент