我该如何删除此文件?我认为它是 VFAT 文件系统中的损坏文件。
????????? ? ? ? ? ? 100.jpg
答案1
一种可能性是找出inode
文件的编号,您可以通过运行 来做到这一点ls -i
。这将返回两列——第一列是 inode,第二列是文件名。然后您可以使用该find
命令仅选择具有该特定 inode 的文件,然后将其删除。
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 很可能是文件所独有的(假设没有硬链接),因此您可以删除文件而不必承担通配符固有的风险。 find 命令的maxdepth
和ok
选项使您意外找到错误文件的可能性更小。
答案2
我不确定这里的答案是否真的有 Stig 报告的问题。我自己在 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 ID。 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
可能会有所帮助。
答案4
你可以尝试
rm *100.jpg*
? 要么是字面意义上的问号,要么是无意义的字符。无论哪种情况,如果文件系统没有被保护,操作系统本身(和 shell)通常可以删除该文件。
如果文件系统是搞砸了,但是删除东西可能会让情况更糟。我建议您启动 Windows 扫描驱动器,然后删除那里的文件(如果可以的话)。