UNIX中使用find和xargs

find命令格式:
    find pathname -options [-print -exec -ok]
    pathname:find命令所查找的目录路径,用.表示当前目录,用/表示系统根目录
    -print  :find命令将匹配的文件输出到标准输出
    -exec   :find命令对匹配的文件执行该参数所给出的shell命名,形式为'command'{} \;
    -ok     :和-exec的作用相同,只不过更安全,每次执行前都需要用户给予确认
find命令选项:
    -name: 按照文件名查找文件
    -perm: 按照文件权限来查找文件
    -prune: 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了-depth,此项忽略
    -user: 按照文件属主来查找文件
    -group:按照文件所属的组来查找文件
    -mtime -n +n: 按照文件的更改时间来查找文件,-n表示距现在n天内,+n表示距现在n天前
    -atime 、 -ctime 与mtime相似
    -nogroup: 查找无有效所属组的文件,即该文件所属组在/etc/groups中不存在
    -nouser: 查找无有效属主的文件,即该文件属主在/etc/passwd中不存在
    -newer fiel1 ! -newer file2: 查找更改时间比文件file1新但比文件file2旧的文件
    -type:查找某一类型的文件,比如: b块设备 d目录 c字符设备 p管道 l符号链接 f普通
    -size n[c]:查找文件长度为n块的文件,带有c时表示文件长度以字节计算
    -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
    -fstype:查找位于某一类型文件系统中的文件,这些文件系统通常可以在配置文件/etc/fstab中找到,该配置文件包含了本系统中有关文件系统的信息
    -mount:在查找文件时不跨越文件系统mount点
    -follow:如果find命令遇到符号连接文件,就跟踪至链接所指向的文件
    -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中

 

各参数说明举例:
-name选项:
    例:  find . -name "*.txt" -print   查找当前目录的*.txt文件
         find ~ -name "[a-z][a-z][0--9][0--9].txt" -print 查找小写字母开头,后面两位数字
-perm选项:
    find . -perm 755 -print       find ~ -perm -007 -print
-user和-nouser选项:
    find . -user username -print   查找文件属主为username的文件
    find . -nouser -print          查找文件属主在/etc/passwd中没有定义的账户的文件
-newer选项:
    find . -newer filename1 ! -newer filename2 -exec ls -l {} \;
    将把比filename1更新但不比filename2新的文件使用ls -l列举出来。
    技巧,如果想找一个更改时间两个小时内的文件,比如现在是23:50,
         touch -t 05042150 file      '创建一个05月04日21:50分的文件file
         find . -newer file -print   '查找比21:50文件file更新的文件
-type选项:
    find /etc -type d -print 查找/etc下所有的目录
    find /etc ! -type d -print 查找/etc下非目录的文件
-size选项:
    find . -size +1000000c -print 查找当前目录大小超过1M的文件
    find . -size 10  -print       查找当前目录大小正好为10块的文件(1块大约512字节)
-ok选项:
    find . -name "*.log" -mtime +5 -ok rm {} \; 删除5日前的log文件,并需要用户确认
目录排序find用法:
    find . -type d -print -local -mount |sort

xargs命令:
    在find命令中加上-exec选项会是与find匹配的文件一起传递给exec做为参数,但是有些系统能够传递给exec的命令有限,这样find在运行一些时间后有可能就会报溢出错误,但如果使用xargs后,find出来匹配的文件会先传递给xargs,然后由xargs一部分一部分地再传递给命令做为参数
    find / -type f -print | xargs grep "device"
    find . -name "core" -print | xargs echo " " >/tmp/core.log

posted on 2009-03-19 06:22  fengyuwuzu1980  阅读(489)  评论(0编辑  收藏  举报

导航