find 删除目录下所有文件

find

当我们需要删除某目录下所有匹配的文件时,可以采用如下命令:

rm -rf /data/

但是当data目录下存在很多长目录和文件,则会报错

参数过长,无法删除

可采用find配合删除

 find . -name "*"  -exec rm -rf {} /;

或者

find . -name "*" | xargs rm rf

但是这个命令如果遇到文件名里有空格或者换行符,就会出错。因为xargs识别字符段的标识是空格或者换行符,所以如果一个文件名里有空格或者换行符,xargs就会把它识别成两个字符串,自然就出错了。
这时候就需要-print0和-0了。

find -print0表示在find的每一个结果之后加一个NULL字符,而不是默认加一个换行符。find的默认在每一个结果后加一个’\n’,所以输出结果是一行一行的。当使用了-print0之后,就变成一行了

find . -name "*"  -print0| xargs -0 rm -rf  

然后xargs -0表示xargs用NULL来作为分隔符。这样前后搭配就不会出现空格和换行符的错误了。选择NULL做分隔符,是因为一般编程语言把NULL作为字符串结束的标志,所以文件名不可能以NULL结尾,这样确保万无一失。


版权声明:本文为nwnu_mimi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。