删除 Linux 中的损坏文件

删除 Linux 中的损坏文件

我该如何删除此文件?我认为它是 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 命令的maxdepthok选项使您意外找到错误文件的可能性更小。

答案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 扫描驱动器,然后删除那里的文件(如果可以的话)。

相关内容