一去不复还的 rm
.. note::
风萧萧兮易水寒,壮士一去兮不复还。
先秦-荆轲《易水歌》
如果Linux命令按照危险性来个排行榜,rm绝对一骑绝尘,名列第一。
因为发生过太多太多无奈、无辜、无法挽回的事情。
所谓风萧萧兮易水寒,壮士一去兮不复还,还得是rm命令
rm
命令用于删除文件或者目录。官方定义为:
remove files or directories
语法
1 | $ rm [options] name... |
参数:
-i
删除前逐一询问确认,确认时比较好用。-f
即使原档案属性设为唯读,也直接删除,无需逐一确认,是force的意思。-r
将目录及里面的子文件逐一删除。
几个示例
删除文件可以直接使用rm
命令,若删除目录则必须配合选项”-r”,例如:
1 | $ rm a.txt |
删除当前目录下的所有文件及目录,命令行为:
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
需要替换为大文件的路径和文件名字。
会写一个空格到这个文件,随后即可删除。