今日分享:我们在肉体的疾病方面花了不少钱,精神的病害方面却没有花什么,现在已经到了时候,我们应该有不平凡的学校。--《瓦尔登湖》

前言

我们都知道,在linux删除一个文件可以使用rm命令,但是有一些特殊名称的文件使用普通的rm方式却没法删除,本文介绍linux中删除特殊名称文件的多种方式。

linux文件命名规则

在介绍之前,简单说明一下linux中文件命名规则。文件或目录名由除“/”和空字符“\0”之外的任意ASCII字符序列组成。当然很多操作系统允许更多类型的字符组成文件名。但对于我们来说,不建议使用一些特殊字符来命名文件。不幸的是,我们可能无意中创建了一些特殊名称的文件,或者由程序意外的创建了一些由特殊字符组成的文件,这个时候,要删除它们,似乎没有想象中的那么简单。

删除时带上路径

假设有一个名为-static文件,我们使用普通方式将它删除:

$

非常可惜,这种方式提示出错,并不能成功地删除-static文件。这是为什么?我们知道在linux中,通常以-开头,后面跟一些字符,作为一个命令的选项,而不巧的,-static就被rm命令认为是一个参数选项,更不幸的是,实际上并没有该选项,因此最终提示invalid option -- 's',导致-static文件无法删除。

那么有没有什么办法删除呢?我们注意到,除了提示非法选项外,还让我们尝试rm ./-static,是否可以呢?我们试一下:

$

最终发现,我们将-static文件成功删除了。因此得到我们的第一种方式,删除文件时带上路径

删除时使用 --

前面除了提示让我们使用rm ./-static之外,还让我们使用rm --help获取更多信息,那么我们就看一下:

$

内容较多,但是可以注意到上面的内容,对于以-开头的文件,提供了两种删除方式,第二种是前面提到的,而第二种,是在删除的文件前面再加--:

$

我们发现这种方式也是可以删除以-开头的文件。

删除时用引号引起来

对于特殊字符,如<>!*等组成的文件如何删除呢?例如:

$

对于这种类型的文件,我们需要用引号将文件名包含起来:

$

这样就可以删除掉了,但是这种方式并不能针对所有该类型的文件,例如,文件名为!*的文件就不能通过这样的方式删除,因为!*是有其他含义的,具体可参看《linux中"!"的惊叹用法,你知道吗?》

增加转义字符删除文件

既然!*无法通过加引号的方式删除,那还有什么办法吗?有!删除时,增加转义字符:

$

这样便可以删除。在linux中,很多字符有着特殊的含义,因此当你需要把它当普通字符使用时,就需要在前面加上\转义字符,这和C语言中的转义有点类似。再举个例子,要删除以空格开头的abc文件,可以使用下面的方式:

$

即可成功删除。

按照i节点号删除

很多时候,文件名压根没法输入,因为它们都是一堆乱码。因此也完全无法通过前面介绍的方法进行删除,那还有办法吗?有!通过查找文件的i节点,按照i节点进行删除。
例如:

$

关于find命令用法,可参考《find命令高级用法》。这种通过i节点号进行删除的方式适用于前面所提到的任何类型文件。

这里扩展说几句。在操作系统中,它是如何识别一个文件的呢?它并不是通过文件名,而是通过一个iNode号,即i节点号来识别不同的文件,文件名不过是这个文件其中的一个属性而已。

使用通配符删除

不多解释:

$ rm *.pdf$ 

但是这种方式可能存在误删,因为只要文件名结尾为.pdf就会被删除,因此根据实际情况慎重使用。

总结

删除特殊文件名称的方法有很多,总结如下:

  • 删除时带上路径

  • 删除时使用 --

  • 删除时用引号引起来

  • 使用转义字符辅助删除

  • 按照i节点号删除

  • 使用通配符删除

不同类型文件可选择使用上面所提较方便的方式进行删除。

相关精彩推荐

GDB调试指南-启动调试

linux中"!"的惊叹用法,你知道吗?

find命令高级用法

Linux中的文件查找技巧

关注公众号【编程珠玑】,第一时间获取更多原创技术文章

linux删除文件_Linux中删除特殊名称文件的多种方式相关推荐

  1. sims算法_如何从Sims 4 Mods文件夹中删除损坏的Mod

    sims算法 Electronic Arts 电子艺术 If your mods are not functioning properly in Sims 4, there are some free ...

  2. Maven删除本地资源库中lastUpdate和repositories文件

    Maven删除本地资源库中lastUpdate和repositories文件 文章目录 一.编写bat 1.删除Maven本地资源库中.lastUpdated的文件.bat 2.删除Maven本地资源 ...

  3. 文件夹中删除的文件怎么找回?

    一般来说,当我们电脑上出现误删的文件,这个文件会暂存在回收站里.这无疑大大降低了,在我们出现误删重要文件,找回的难度.给予我们一个挽回的缓冲区.毕竟处理电脑文件经常发生误删现象的.如果是不重要的文件, ...

  4. sql数据库备份默认路径_在Linux上SQL Server中更改默认数据库文件和备份路径

    sql数据库备份默认路径 In a previous article, we explored the process to change default SQL dump file location ...

  5. linux 获取文件父目录权限,Linux 文件权限中,操作一个文件需要父目录的那些权限?...

    eudore:linux 文件权限中,操作一个文件需要父目录的那些权限? 是否需要检查每级目录?想找到一份完整规范正确的指导,自己在写检查 linux 用户文件权限的代码. 例如读取一个文件 /hom ...

  6. python 按照顺序读取文件夹中的图片名称

    前言: 在ubuntu16.04系统中,读取图像名称的时候,往往会出现乱序的现象,比如: 1,2,3,4,5,6,7,8,9,10 可能会被提取到的顺序为: 1,10,2,3,4,5,6,7,8,9 ...

  7. 【批量改文件夹中的图片名称-python】

    批量改文件夹中的图片名称-python(记录) 目的 最近在制作零件数据集标注时,发现在摄像机中拍摄的图片名称是乱码的,不便于进行数据标注,所以写下这段代码,以便日后再次使用. 转换之前图片文件夹中的 ...

  8. 失物招领php_我的Mac上“失物招领”文件夹中的大型iNode文件是什么?

    失物招领php If you're trying to figure out what's taking up space on your Mac, you might stumble upon so ...

  9. matlab打开bmp,Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

最新文章

  1. 在C++中加载TorchScript模型
  2. D(背)P(包)专题
  3. ACM Smallest Difference
  4. 27对象的向上向下转型
  5. Swift基础语法 、 元组(Tuple)
  6. Linux 安装json神器 jq
  7. 【渝粤题库】国家开放大学2021春1373特殊教育概论题目
  8. sed 解释正则表达式
  9. leetcode题解41-缺失的第一个正数原来如此简单
  10. AVR 定点数运算程序设计及数制转换
  11. XSS测试平台源码——免费分享
  12. win7共享xp打印机_打印机共享那些事儿……
  13. 智能小车-红外循迹篇
  14. ftp上传当天文件的方法_8uftp上传工具,8uftp上传工具的使用方法只需8步
  15. 微信公众号开发文档,微信小程序开发文档,微信扫码支付文档,微信委托代扣模式开发文档
  16. E001检测到您的环境不支持HTML5,佳能打印机故障代码、故障原因、故障排除
  17. 习题 3.10 有一函数:写一程序,输入x,输出y值。
  18. python刷b站视频浏览量_python刷B站播放量
  19. JDF bean模块想法交流
  20. Kindle可用三方字体的书籍格式

热门文章

  1. 谈Servlet与JSP
  2. java xml 读取库_Java开发中读取XML与properties配置文件的方法
  3. python2中xrange比range优点_【Python面试】 说说Python中xrange和range的区别?
  4. CountDownLatch 介绍与举例实现
  5. php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
  6. html标签info,HtmlTrInfo 元素
  7. 每个java小应用程序都得继承,JAVA复习题3
  8. php验证旧密码,PHP最佳实践之过滤、验证、转义和密码
  9. Linux C文件编译
  10. 数据结构实验:一元多项式计算器