您的位置:首页 > 其它

find,exec和xargs使用

2015-04-21 14:31 225 查看
一、find:
find . -name "*.txt"或者find . -name *.txt 查找文件
find /etc/ -type f #查找文件类型(f 表示普通文件,其他的文件类型可参考相关资料)
find /etc/ -mtime +1 #查找最近修改的文件(mtime以“天”为单位)
+1:表示一天以前的
-1:一天以后的
1:表示前一天的

如下图所示,表示mtime为0,1,2 三个不同时间的取值范围,其图中箭头表达的意思,以“2天”时间为单位解释如下箭头的意思。(注意:所用的时间都是以你操作的查询的时间为起点进行计算)
<---------------------- #表示mtime +2的取值范围
<----------------------> #表示mtime 2的取值范围
-----------------------> #表示mtime -2的取值范围




参考链接:http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/

但是在各种参考的使用方式中有用+号,-号,不带符号的用法,那么这里又有什么区别呢?

注意这里的n,如果n为带有+号的值,意思为删除n天前所有的文件,比如n=+1且今天是15号,那么删除14号以前的数据,不包括14号,如果

是负号(n=-1)则为删除一天内的文件,比如今天15号,那么删除15号的数据,如果是(n=-2)则代表删除一天前到今天的所有数据,比如

今天15号,那么从14号开始删除。如果不带有符号,那么则删除指定前n天中这一天的数据,比如(n=1)且今天是15号,则删除14号这一天

所有数据。
注意这里的一天是指当前系统时间算起的,而不是0-24小时算一天

二、exec(exec 必须和find一起使用)
1、find ~ -name *.txt -exec ls -l {} \; #在当前目录及其子目录下查找*.txt文件,并将查找到的文件信息显示出来。注意:{}和\之间有空格;不要少了最后的分号“;”,否则提示find: missing argument to `-exec‘,这个意思并不是说没有exec参数,而是exec后面的参数不对。
2、find /etc/ -type f exec cp {} /tmp/etc_bak/ \; #备份查找到的普通文件到/tmp/etc_bak/目录下;分好到达有什么作用呢?通俗的说:在该例子中,由于在/etc/下的普通文件,肯定不止一个,所以需要通过(;)来区分和隔离查到的相关的内容,以方便对每一个查到的文件进行操作。

三、xargs(结合管道符使用)xargs不加任何参数:(输出结果为一串,且通过空格隔开)[root@localhost tmp]# find /tmp/ -type f | xargs
/tmp/rsync/testfile /tmp/testfile /tmp/1.sh /tmp/yum.log /tmp/rsyncbak/testfile /tmp/rsyncbak/lnrsynctest

xargs 加 i 参数,表示查找的结果(以每次查找的结果为单位,换行输出)

[root@localhost tmp]# find /tmp/ -type f | xargs -i echo {}
/tmp/rsync/testfile
/tmp/testfile
/tmp/1.sh
/tmp/yum.log
/tmp/rsyncbak/testfile
/tmp/rsyncbak/lnrsynctest #换行输出,其好处在于可以对单个查找的文件进行操作
________________________________________________________________________________________
[root@localhost tmp]# ls | xargs -t -i echo {}
echo 1.sh
1.sh
echo rsync
rsync
echo rsyncbak
rsyncbak
echo testfile
testfile
echo yum.log
yum.log

eg:实用案例
find /etc/ -type f |xargs -i cp {} /tmp/etc_bak/ #批量COPY

find /var/log -type f -mtime +10 |xargs rm -f #批量删除,把查找的文件直接删除,不需要对单个文件操作,所以不需要 i 参数以及“{}”的配合使用

find /var/log -type f -mtime +10 |xargs -i mv {} {}.bak #批量改名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  exec find xargs