一、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的取值范围

find,exec和xargs使用_xargs




参考链接: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  #批量改名