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

Linux find命令与xargs的使用问题

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

上一篇
下一篇