小雨宙

Let's debug the world.

Linux下删除/重命名无法输入的乱码文件的方法

很多人可能会遇到的问题,做个小分享。希望能帮到一些人。


简单的情况:

如果某目录下就那么一个文件。或者整个目录都不想要了,可以直接用 * 代替,删除全部。

复杂的情况:

如果文件夹內有很多文件,只想处理某个/某些乱码的文件。

为了效果逼真,我手工造了一些文件名乱码的文件

/tmp # touch $'\x98\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00'
/tmp # touch $'\x98\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01\x01'
/tmp # touch $'\x98\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01\x02'
/tmp # touch $'\x98\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01\x03'
/tmp # touch $'\x98\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01\x04'

/tmp # ls -l
-rw-r--r-- 1 root root 0 Jan 13 17:51 ???????????
-rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
-rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
-rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
-rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
/tmp #

可以看到,这里这里多有了5个乱码文件。

看着文件名全是问号,根本分不出谁是谁。(有些比较新的系统上这些字符以16进制显示,可以直接处理)。

在文件系统中,识别文件谁是谁的特征,除了文件名以外,还有一个唯一识别代号,叫inode number。

就像人的身份证号一样。

我们可以ls -i 来查看文件的inode

/tmp # ls -i
48488 ??????????? 48489 ???????????? 48490 ???????????? 48491 ???????????? 48492 ????????????

好了。现在有了这些号码,我们就可以针对性的找指定文件了。怎么找呢?

可以用find命令。它有一个参数是-inum,可以传入文件的inode number来找到文件。

/tmp # find -inum 48488
./� 

find后想重命名就可以直接用-exec 去执行命令,{} 会自动解析成那个文件名。想改成啥都行,我为了好识别,把文件名改成了跟inode number一样的内容
/tmp # find -inum 48488 -exec mv {} 48488 \;
/tmp # ls -il
48488 -rw-r--r-- 1 root root 0 Jan 13 17:53 48488
48489 -rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
48490 -rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
48491 -rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
48492 -rw-r--r-- 1 root root 0 Jan 13 17:51 ????????????
/tmp #

如果要删除它。是不是 find -inum 48488 -exec rm -f {} \; 就可以了?

是的,没错。

不过find还有一个-delete参数,可以直接删除找到的文件。

find -inum 48488 -delete

博文最后更新时间:


评论

  • 暂无评论

发表评论

如看不清,点击图片可重新生成
博客统计

访问量:35480

博文总数:11 评论总数:1

原创11 翻译0 转载0