明日分享:我们在肉体的癌症方面花了不少钱,精神的虫害方面却没有花哪些,如今早已到了时侯,我们应当有不平凡的校区。--《瓦尔登湖》
序言
我们都晓得,在linux删掉一个文件可以使用rm命令,并且有一些特殊名称的文件使用普通的rm方法却无法删掉,本文介绍linux中删掉特殊名称文件的多种形式。
linux文件命名规则
在介绍之前,简单说明一下linux中文件命名规则。文件或目录名由除“/”和空字符“”之外的任意ASCII字符序列组成。其实好多操作系统容许更多类型的字符组成文件名。但对于我们来说,不建议使用一些特殊字符来命名文件。不幸的是,我们可能无意中创建了一些特殊名称的文件,或则由程序意外的创建了一些由特殊字符组成的文件,这个时侯,要删掉它们,虽然没有想像中的这么简单。
删掉时带上路径
假定有一个名为-static文件,我们使用普通方法将它删掉:
$ rm -static
rm: invalid option -- 's'
Try 'rm ./-static' to remove the file '-static'.
Try 'rm --help' for more information.
十分可惜,这些方法提示出错,并不能成功地删掉-static文件。这是为何?我们晓得在linux中,一般以-开头,前面跟一些字符,作为一个命令的选项,而不巧的,-static就被rm命令觉得是一个参数选项,更不幸的是,实际上并没有该选项,因而最终提示invalidoption--‘s’linux学习论坛,致使-static文件难以删掉。
这么有没有哪些办法删掉呢?我们注意到linux删除只读文件,不仅提示非法选项外,还让我们尝试rm./-staticnode.js安装linux,是否可以呢?我们试一下:
$ rm ./-static
$
最终发觉,我们将-static文件成功删掉了。因而得到我们的第一种方法,删掉文件时带上路径。
删掉时使用--
后面不仅提示让我们使用rm./-static之外,还让我们使用rm--help获取更多信息,这么我们就看一下:
$ rm --help
(省略部分内容)
To remove a file whose name starts with a '-', for example '-foo',
use one of these commands:
rm -- -foo
rm ./-foo
(省略部分内容)
内容较多,而且可以注意到里面的内容,对于以-开头的文件,提供了两种删掉方法linux删除只读文件,第二种是上面提及的,而第二种,是在删掉的文件后面再加--:
$ rm -- -static
$
我们发觉这些方法也是可以删掉以-开头的文件。
删掉时用冒号造成来
对于特殊字符,如!*等组成的文件怎么删掉呢?诸如:
$ rm !*
rm: missing operand
Try 'rm --help' for more information.
对于这种类型的文件,我们须要用冒号将文件名包含上去:
$ rm "!*"
$
这样就可以删掉掉了,并且这些方法并不能针对所有该类型的文件,比如,文件名为!*的文件就不能通过这样的方法删掉,由于!*是有其他含意的,具体可参看《》
降低通配符字符删掉文件
既然!*未能通过加破折号的形式删掉,那还有哪些办法吗?有!删掉时,降低通配符字符:
$ rm !*
$
这样便可以删掉。在linux中,好多字符有着特殊的含意,因而当你须要把它当普通字符使用时,就须要在上面加上通配符字符,这和C语言中的通配符有点类似。再举个反例,要删掉以空格开头的abc文件,可以使用下边的形式:
$ rm abc
$
即可成功删掉。
根据i节点号删掉
好多时侯,文件名压根无法输入,由于它们都是一堆乱码。因而也完全没法通过上面介绍的方式进行删掉,那还有办法吗?有!通过查找文件的i节点,根据i节点进行删掉。
比如:
$ ls -i #找到乱码文件的i节点号
1703907 ç¼?ç¨?ç? ç??é«?æ¸?pdfç??.pdf
$ find ./ -inum 1703907 -exec rm {} ; #或者使用-delete参数
关于find命令用法,可参考《》。这些通过i节点号进行删掉的方法适用于上面所提及的任何类型文件。
这儿扩充说几句。在操作系统中,它是怎样辨识一个文件的呢?它并不是通过文件名,而是通过一个iNode号,即i节点号来辨识不同的文件,文件名不过是这个文件其中的一个属性而已。
使用转义删掉
不多解释:
$ rm *.pdf
$
然而这些方法可能存在删掉,由于只要文件名结尾为.pdf都会被删掉,因而依据实际情况谨慎使用。
总结
删掉特殊文件名称的方式有好多,总结如下:
不同类型文件可选择使用前面所提较便捷的方法进行删掉。