linux下面查找并删除对应的文件(find方法处理带空格的目录)

0x00 前言

昨天在家里整理自己的一些资料,需要删除很多没用的东西,比如一个文件夹里面的html文件,txt文件,以及torrent相关的比特彗星的提示文件等等。这里自然就用到了find命令。我非常的自信的打出了 find ./ -name *.html -type f |xargs rm -rf 的命令,然而期待的结果没有出现,出来的是是个 rm 命令的报错,当时我就震惊了作为一个用了快 10 年 linux 的老司机居然翻车了,这个不正常啊。然后开始检查,找 find 查找后自己删除的命令,找到的命令如下find . -name ‘*.txt’ -type f -print -exec rm -rf {} ; 然后报错,-exec 没有执行的参数。这更不正常了,有点蒙了。

0x01 分析与解决

这时候先去搜索一波看看情况,find . -name *.txt 得出了很多的结果,说明这个查询的命令是没有问题的,下面看查询的结果发现了一个规律,那就是我的这些资料的中间是有空格的,那么很有可能参数操作的时候不是操作的完整的路径所以不能够进行操作,想到这开始查询。find 空格,果然没有令我失望,已经有很多的人踩到这个坑了。那么改善一下。

find ./ -name '*.txt' -print0 | xargs -0 rm -rf

find有一个参数-print0,于默认的-print相比,输出的序列不是以空格分隔,而是以null字符分隔。而xargs也有一个参数-0,可以接受以null而非空格间隔的输入流。所以说xargs简直就是为find而生的。上面的问题就很好解决了

xargs 这个是个非常好的命令,把前面处理的结果,当做参数给下一个命令使用,它还有很多别的用法。详见http://man.linuxde.net/xargs,有一些示例,其中就包括今天我们遇到的这个问题.

以上内容部分参考自 https://dbajun.iteye.com/blog/1967651

上一篇
下一篇