0%

一去不复还的rm 命令

一去不复还的 rm

.. note::
风萧萧兮易水寒,壮士一去兮不复还。
先秦-荆轲《易水歌》

如果Linux命令按照危险性来个排行榜,rm绝对一骑绝尘,名列第一。

因为发生过太多太多无奈、无辜、无法挽回的事情。

所谓风萧萧兮易水寒,壮士一去兮不复还,还得是rm命令

rm 命令用于删除文件或者目录。官方定义为:

remove files or directories

语法

1
$ rm [options] name...

参数

  • -i 删除前逐一询问确认,确认时比较好用。
  • -f 即使原档案属性设为唯读,也直接删除,无需逐一确认,是force的意思。
  • -r 将目录及里面的子文件逐一删除。

几个示例

删除文件可以直接使用rm命令,若删除目录则必须配合选项”-r”,例如:

1
2
3
4
5
6
$ rm  a.txt 
rm:是否删除 一般文件 "test.txt"? y
$ rm test
rm: 无法删除目录"test": 是一个目录
$ rm -r test
rm:是否删除 目录 "test"? y

删除当前目录下的所有文件及目录,命令行为:

1
$ rm  -r  * 

文件一旦通过rm命令删除,则无法恢复,所以必须格外一定切记小心地使用该命令。

因为发生过很多欲哭无泪的故事。。。

主要的痛点就在如果是在root账户权限下,rm无所不能呀

/bin/rm Argument list too long – Linux”

这种情况主要在大批量删除居多文件的情况下发生,也是因为删除的命令参数超过了shell参数的个数导致的,可以通过getconf ARG_MAX来确认,解决方法好几种

配合find与xargs完成删除海量文件

可以通过find和xargs命令配合的方式,比如删除当前目录所有的png文件,

1
$ find . -name "*.png" -print0 | xargs -0 rm

上面的这个命令会删除当前目录及子目录下所有的png文件,如果不想遍历,仅仅是当前目录,可以采用如下的方式:

1
$ find . -maxdepth 1 -name "*.png" -print0 | xargs -0 rm

使用find的delete选项

还有一种方法是使用如下:

1
$ find . -name "*.png" -delete

切记,需要再三确认。

快速删除大文件

有时候文件可能会变得很大,非常非常大。比如有些log文件动辄几十GB,而通常情况下可能会用rm来删除,可能要产生比较大的IO消耗,一个比较简单的方法可以这么来操作:

1
$ echo '' > big_file

当然这个big_file需要替换为大文件的路径和文件名字。

会写一个空格到这个文件,随后即可删除。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道