Linux 删除文件名为乱码的文件

本文将会讲述如何通过Linux rm命令删除文件名包含特殊字符或者乱码文件的方法。

在Linux系统下我们主要用来删除文件的命令是rm或者unlink命令,但是当文件名为乱码或者包含乱码的文件是,我们就无法选择要删除的文件名,这样就会导致无法删除这些文件名为乱码或者包含特殊字符的文件。
当然这种乱码文件名的文件大多数情况都是由于不正常的操作,比如突然中断从服务器文件上传或者下载某些文件的时候,就有可能导致乱码文件名的出现。

Linux下删除以短横杠或者减号“-””开头的文件名的文件

当文件名以减号“-”开头的时候,如果我们使用rm 命令来删除该文件的时候,系统会报错,那么删除这种文件,可以通过rm命令后面接–, 来删除。
执行命令如下:

#rm -- -fio.txt

Linux下删除文件名包含特殊字符的文件

如果文件名包含的是系统里可以打印的特殊字符的文件,这个时候我们可以使用转义字符或者双引号来传给rm命令。
如果要删除当前目录下的名为“!”的文件,那么可以执行下面的命令:

# rm  \!

或者

# rm “!“

命令输出日下:

root@devops:~# ls !
!
root@devops:~# ls -al !
-rw-r--r-- 1 root root 0 3月  20 22:20 !
root@devops:~# rm \!
root@devops:~# ls !
ls: 无法访问'!': 没有那个文件或目录
root@devops:~# rm "!"
root@devops:~#

Linux 中删除文件名为乱码的文件

对于文件名包含乱码的文件,这些乱码字符大多数都是系统里无法打印出来的,所以你也无法选择或者从键盘输入,这个时候我们可以通过文件的inode号,再结合find命令,将文件删除。
首先我们通过执行ll -i 命令来获取当前目录下的文件的inode号,比如inode号为131104,然后执行下面的find命令,将该inode所对应的文件删除。执行命令如下:

# find ./ -inum 131104 -print -exec rm {} \;

命令输出如下:

root@devops:~/osetc# ll -i
总用量 32
131103 drwxr-xr-x 2 root root  4096 3月  20 22:28 ./
131073 drwx------ 7 root root  4096 3月  20 22:22 ../
131104 -rw-r--r-- 1 root root     0 3月  20 22:28 $%^%$^
131089 -rw-r--r-- 1 root root 24202 3月  18 23:30 fio1.txt
root@devops:~/osetc# find ./ -inum 131104 -print -exec rm {} \;
./$%^%$^
root@devops:~/osetc# ll -i
总用量 32
131103 drwxr-xr-x 2 root root  4096 3月  20 22:30 ./
131073 drwx------ 7 root root  4096 3月  20 22:22 ../
131089 -rw-r--r-- 1 root root 24202 3月  18 23:30 fio1.txt

或者使用另一个命令,如下:

#find -inum 131104 -delete

命令输出如下:

root@devops:~/osetc# find -inum 131104 -delete
root@devops:~/osetc# ll -i
总用量 32
13113 drwxr-xr-x 2 root root  4096 3月  20 22:32 ./
131073 drwx------ 7 root root  4096 3月  20 22:22 ../
131089 -rw-r--r-- 1 root root 24202 3月  18 23:30 fio1.txt

从上面我们可以看到,inode号为131104的文件被删除了。


Leave a Reply