Linux下利用inode号删除乱码文件

  Linux 由于与 Windows 的字符编码不同等原因,经常会遇到中文文件名乱码无法显示的情况,命令行下使用通常的 rm filename 的方法删除文件就不可行了,我们可以通过文件的 inode number 来对文件进行操作。

inode 是什么

  Wikipedia 对于 inode 的定义是:

inode是指在许多“类Unix文件系统”中的一种数据结构。每个inode保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、socket、管道, 等等)的元信息数据,但不包括数据内容或者文件名。

简单来说,每个文件都有一个独一无二的 inode,我们可以通过 inode 来定位一个文件。

显示文件 inode 号

1
ls -i  # ls 显示 inode number 

ps: 显示文件的详细 inode 信息可以通过 stat filename 来显示,于本文无关,不讨论。

删除乱码文件

这里通过 find 来找到该文件,执行 rm 操作。(这里假设上一步找到的 inode number 为 123456 )

1
2
3
4
5
find . -inum 123456 | xargs rm -f # -f 表示强制删除,如果出现 rm : missing operand 可以加上该参数  
# 或者是:
find . -inum 123456 -delete
# 或者是:
find . -inum 123456 -exec rm -rf {} \;