5

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

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

6 ответов6

4

Одна возможность - узнать номер 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

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

3

Я не уверен, что какой-либо из ответов здесь действительно имел проблему, о которой сообщил Стиг. Я сам столкнулся с этой проблемой на моей файловой системе 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 явно не показывает идентификатор inode. Никакое использование rm не поможет. Даже rm -rf попадает в каталог и пытается удалить файл напрямую (и без вывода сообщений).

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

3

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

rm -i ./*100.jpg*

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

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

0

Если вы хотите удалить все поврежденные файлы, вы можете сделать это:

ls -1 | grep -P "[\x80-\xFF]" | xargs rm

Над grep командных файлов Grep , который имеет символы не ASCII.

0

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

rm *100.jpg*

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

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

0

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

  1. Переименуйте свой каталог.
  2. Восстановить исходный каталог (пусто).
  3. Скопируйте другие файлы обратно в него.
  4. Удалите каталог, содержащий этот файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .