您的位置:首页 > 运维架构 > Linux

linux下find ... |xargs 和 -exec

2013-05-28 12:19 155 查看
今天在linux下给数据库做自动备份,要求每个星期一备份一次,然后备份文件只保留当前一个月的文件。数据备份的shell脚本和守护进程就不说了,我这里只说说查找当前文件夹文件,保留一个月备份上。用到的命令find -exec rm:

一般有2中写法:

#find ... -exec rm {} \;

#find ... | xargs rm -rf

两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,后者xargs命令会分批次的处理结果。

xargs优点:由于是批处理的,所以执行效率比较高(通过缓冲方式)

xargs缺点:有可能由于参数数量过多(成千上万),导致后面的命令执行失败

若换成 find ....-execrm {} \; 的话,

因为rm 是"逐个" item 去处理的, 则无此忧虑

rm不接受标准输入,所以不能用find / -name "tmpfile" |rm

-exec 必须由一个 ; 结束,而因为通常 shell 都会对 ; 进行处理,所以用 \; 防止这种情况。

{} 可能需要写做 '{}',也是为了避免被 shell 过滤。

例子:

cd /home/useway/DataBackup

find ./ -type f -mtime +30 -exec rm -fr {} \; > /dev/null 2>&1

./表示从当前目录找

-type f,表示只找file,文件类型的,目录和其他字节啥的不要

-mtime +30 表示30天前的文件。

-exec 把find到的文件名作为参数传递给后面的命令行,代替{}的部分

-exec后便跟的命令行,必须用“ \;”结束

/dev/null 2>&1 这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: