假如有人问你,你会在Linux中批量删除文件吗?
你会想一下,说会啊。无非就是find找出来,然后使用rm -f去删除。或者先打印出来文件名,再去删除。
或者还有一种情况是要提高效率删除文件怎么做呢?
需要使用xargs,因为一般xargs 比find...-exec..的效率高。
find命令可以借助-exec与其他命令进行结合。-exec算是find比较强大的特性之一。
举例:
find . -type f -mtime 180 -name "*.log" -ecec rm -f {} \;
对于文本处理而言,需要具备扎实的理论和实践才能够写出适合的单行命令解决方法。xargs 就是构建单行命令的重要组件之一。
find结合xargs可以使任务变得更轻松,但是一种错误的使用方式是find... -print | xargs rm -f。
因为这样做非常危险,我们无法预测find的输出结果的定界符。一旦文件名中含有空格符,会被xargs误认为是定界符而删掉。
所以我们要是把find作为xargs的输入,就必须把--print0与find结合使用,以字符null来分隔输出。
命令是:find...-print0 | xargs -0 rm -f
举例:
find . -type f -name "dnf.librepo.log-*" -print0 | xargs -0 rm -f
这样使用才是Linux批量删除文件的正确方式!
鼓励的话语:自信即巅峰!