当前位置: 首页 > 科技观察

你知道如何在Linux中删除具有这些特殊名称的文件吗?

时间:2023-03-13 21:21:18 科技观察

本文转载自微信公众号《编程珠玑》,作者王守老师。转载本文请联系编程诸暨公众号。我们都知道在linux中可以使用rm命令来删除文件,但是有一些特殊名称的文件是无法使用普通的rm方法删除的。本文介绍在linux中删除特殊名称文件的各种方法。在介绍linux的文件命名规则之前,先简单介绍一下linux中的文件命名规则。文件名或目录名由除“/”和空字符“\0”之外的任何ASCII字符序列组成。当然,许多操作系统允许更多类型的字符组成文件名。但是对于我们来说,不建议使用一些特殊字符来命名文件。不幸的是,我们可能会不经意地创建一些具有特殊名称的文件,或者不小心被程序创建了一些由特殊字符组成的文件。这个时候,似乎要删除它们,并没有想象中那么简单。删除时带上路径假设有一个名为-static的文件,我们按正常方式删除:$rm-staticrm:invalidoption--'s'Try'rm./-static'toremovethefile'-static'.Try'rm--help'获取更多信息。可惜这个方法提示错误,无法成功删除-static文件。为什么是这样?我们知道,在linux中,通常以-开头,后面跟着一些字符,作为一个命令选项,但是很遗憾,-static被rm命令认为是一个参数选项,而不幸的是,实际上并没有这个选项,所以invalidoption--'s'最后提示,导致无法删除-static文件。那么有什么办法可以删除吗?我们注意到除了提示非法选项外,让我们试试rm./-static,可以吗?我们试试:$rm./-static$终于发现我们将-static文件删除成功了。这样我们就得到了我们的第一种方式,删除文件时取路径。删除时使用--除了提示我们使用rm./-static外,还让我们使用rm--help获取更多信息,接下来我们看一下:$rm--help(部分内容省略)Toremoveafilewhosenamestartswitha'-',例如'-foo',useoneofthesecommands:rm---foorm./-foo(省略部分内容)内容较多,但大家可以注意到上面的内容。对于-开头的文件,有两种删除方法,第二种是上面说的,第二种是在删除的文件前面加上--:$rm---static$。我们发现这个方法也可以删除-开头的文件。删除时使用引号。如何删除由<>!*等特殊字符组成的文件?例如:$rm<>\!*rm:missingoperandTry'rm--help'fororeinformation。对于这种类型的文件,我们需要把文件名用引号括起来:$rm"<>\!*"$这样才能删除,但是这种方法并不是对所有这种类型的文件都有效。比如一个名为!*的文件是不能用这种方式删除的,因为!*还有其他含义。详情请参考《linux中"!"的惊叹用法,你知道吗?》添加转义字符删除文件。既然!*不能通过加引号的方式删除,请问还有什么办法吗?是的!删除的时候加上转义符:$rm\!*$这样就可以删除了。在linux中,很多字符都有特殊的含义,所以当需要把它们当作普通字符使用时,需要在前面加上\转义符,有点类似于C语言中的转义符。再比如删除以空格开头的abc文件,可以使用如下方法:$rm\abc$即可成功删除。根据i节点号删除。很多时候文件名根本不能输入,因为都是一堆乱码。所以,通过上面介绍的方法是完全无法删除的。还有别的办法吗?是的!通过查找文件的i节点,根据i节点删除。例如:$ls-i#查找乱码文件的第i个节点号1703907????¨??????é?????pdf???.pdf$find./-inum1703907-execrm{}\;#或者使用-delete参数,find命令的用法请参考《find命令高级用法》。这种按i节点号删除的方法适用于上述任何类型的文件。这里再多说几句。在操作系统中,它是如何识别一个文件的呢?它不是通过文件名来识别不同的文件,而是通过一个iNode编号,即i-node编号。文件名只是文件的属性之一。使用通配符删除就不多解释了:$rm*.pdf$但是这个方法可能会误删,因为只要文件名以.pdf结尾的都会被删除,所以谨慎使用以实际情况为准。总结删除特殊文件名的方法有很多种,总结如下:删除时带上删除时的路径--删除时使用引号,使用转义符辅助删除,根据i节点号删除,使用通配符删除不同类型的文件,可以选择使用上面提到的更方便的删除方式。作者:守望,linux应用开发者,目前在公众号【编程明珠】?上分享Linux/C/C++/数据结构与算法/工具等原创技术文章和学习资源。