Как я могу удалить этот файл? Я думаю, что это поврежденный файл в файловой системе VFAT.
????????? ? ? ? ? ? 100.jpg
Как я могу удалить этот файл? Я думаю, что это поврежденный файл в файловой системе VFAT.
????????? ? ? ? ? ? 100.jpg
Одна возможность - узнать номер 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 только снижают вероятность случайного попадания в неправильный файл.
Я не уверен, что какой-либо из ответов здесь действительно имел проблему, о которой сообщил Стиг. Я сам столкнулся с этой проблемой на моей файловой системе 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 (надеюсь).
Я бы порекомендовал немного более оборонительную версию предложения cHao:
rm -i ./*100.jpg*
-i
заставляет rm
спросить вас, удалять ли каждый файл, соответствующий шаблону; это гарантирует, что вы не будете случайно удалять и другие файлы. И ведущий ./
гарантирует, что все имена файлов будут обрабатываться как имена файлов, а не как дополнительные параметры для rm
(похоже, что у вас там может быть начальная черта, поэтому это важно).
Между прочим, возможно, что внутри строки "100.jpg" есть невидимые символы. Если приведенное выше выдает сообщение об ошибке типа « rm: ./*100.jpg*: not found
", поэтому может быть полезен ls -1fw | cat -v
.
Если вы хотите удалить все поврежденные файлы, вы можете сделать это:
ls -1 | grep -P "[\x80-\xFF]" | xargs rm
Над grep
командных файлов Grep , который имеет символы не ASCII.
Вы можете попробовать
rm *100.jpg*
?Это буквальные знаки вопроса или символы, которые не имеют смысла. В любом случае, сама ОС (и оболочка) обычно могут удалить файл, если файловая система не подключена.
Если файловая система испорчена, хотя, удаляя материал может сделать его хуже. Я бы порекомендовал вам загрузиться в Windows, чтобы отсканировать диск, и удалить файл там, если можете.
Вы можете попробовать это: