由于各种原因在linux下总是会出现那么一些乱码文件,或者不能正常输入的文件名。当遇到这些无法正常输入的文件名要删除的时候就需要使用文件对应的inode号对文件进行删除。
[root@localhost test]# ls
??2012$05*21  2012\05$21
    、2012$05*21 2012\05$21 这个文件是我特意创建的两个文件,、2012$05*21 使用ls命令显示成了??2012$05*21,使用rm命令删除的时候无法输入文件名;2012\05$21由于中间有‘\’‘$’这个符号,自己ok·直接使用rm 2012\05$21 是无法删除的,如果只是文件名中有一些特殊的字符的话可以使用‘\’转义符,rm 2012\\05\$21进行删除。
[root@localhost test]# rm 2012\05$21 
rm: cannot remove `2012051': No such file or directory
[root@localhost test]# rm 2012\\05\$21 
rm: remove regular empty file `2012\\05$21'? y
    、2012$05*21这个文件在linux下显示为??2012$05*21删除这个文件的时候我们无法输入它的文件名,这时候就需要用到文件的inode号来删除。
  • 如何查看一个文件的inode号?
    查看文件的inode号可以使用ls命令的-i参数。
[root@localhost test]# ls -i
388678 ??2012$05*21 
文件名前面对应的一个数字就是这个文件的inode号
  • 利用inode号和find命令删除文件
[root@localhost test]# find ./ -inum 388678 -exec rm -i {} \;
rm: remove regular empty file `./\241\2422012$05*21'? y
或者这样
[root@localhost test]# rm `find ./ -inum 388678`
rm: remove regular empty file `./\241\2422012$05*21'? y
    分析下这个删除过程的原理其实很简单,通过ls -i 这个命令获得要删除文件的inode号,然后使用find命令的-inum选项查找对应inode号的文件名,然后将文件夹名通过find的-exec参数或者通过``反引号传递给rm命令