find和xargs学习笔记

find和xargs学习笔记

目录


简介

  1. find是Unix环境下用于查找文件的一个功能强大的工具,可以按照很多种条件进行筛选,如文件权限、属主、大小、修改时间等等。
  2. xargs是用于结构化参数列表的命令,主要用于在前一个命令的输出作为后一命令的输入时,前一个命令的输出结果很多可能导致后一命令的输入溢出,因此配合对前一命令输出结果进行结构化整理以便一批一批地输入。

基本使用方法

find格式

  1. 基本格式和说明:
    • find [ -H | -L] Path ... [-options ][-print -exec -ok];
    • -H为可选项,不常用,用法待补充?;
    • -L为可选项,不常用,用法待补充?;
    • Path为find命令作用的路径,可以是相对路径也可以是绝对路径。如.表示当前目录及子目录,~表示在$HOME目录;
    • -options为可选的选项,可以同时使用多个选项,每个选项前要加‘-’,如-name-user-mtime-type等等。

find常见示例

以下示例在AIX中都测试过

  1. -name选项,查找文件名为一定格式的文件,
    EX1:在当前目录查找文件名后缀为”.txt“的文件:
    find . -name "*.txt"
    EX2:查找前三位为小字字母第4位为数字的且总长为4位的文件:
    find . -name "[a-z][a-z][a-z][0-9]"

  2. -perm选项,按文件权限位查找,格式find Path -perm [-] Mode

    • 在当前目录查找文件权限位绝对模式为755的文件:
      find . -perm 755
    • 在当前目录查找比绝对模式004更多权限的文件:
      find . -perm -004
  3. -prune选项,在查找时忽略某个目录,在”/apps”目录中查找但不查找“/apps/bin”目录
    find /apps -name "/apps/bin" -prune -o -print
  4. -user-nouser选项,-user为查找文件属主为指定用户(示例中用户为“dave”)的文件,-nouser为查找无有效文件属主的文件:
    find . -user dave -print
    find . -nouser -print
  5. -group-nogroup选项,-group为查找文件所属用户组为指定组名(示例中组为“accts”)的文件,-nogroup为查找无有效文件所属用户组的文件:
    find . -group accts -print
    find . -nogroup -print
  6. -mtime [-/+]n选项,按文件的修改时间来查询,-n+n分别表示在n天内和n天前,下例为在当前目录查询修改时间为5天前的文件:
    find . -mtime +5 -print
  7. -atime [-/+]n选项,按文件的访问时间来查询,-n+n分别表示在n天内和n天前,下例为在当前目录查询访问时间为5天前的文件:
    find . -atime +5 -print
  8. -newer File选项,可查询比指定文件的修改时间更近的文件,
    • 配合使用touch -t可以用于更精确的时间范围查找,如下示例1:
      EX1:创建一个时间为2015年8月12日14点20分的文件
      touch -t 201508121420 th1
      查找2015年8月12日14点20分之后修改的文件
      find . -newer th1 -print
    • 如果用!操作符,则可某个范围内查找,如下示例2:
      EX2:创建一个时间为2015年8月12日14点22分的文件
      touch -t 201508121422 th2
      查找文件th1的修改时间后修改的文件且th2修改时间前修改的文件(包括th2的修改时间)
      find . -newer th1 ! -newer th2 -print
  9. -type Type选项,查找指定类型的文件Type类型有[bcdflps],如下查找普通文件:
    find . -type f
  10. -size [-/+]n[c]选项,按照文件大小查找,[-/+]为可选输入,表示小于或大小指定大小,[c]为可选输入,在未输入时文件大小单位默认为块(一块=512字节),输入后单位为字节,如下示例找大于100字节的文件:
    find . -size +100c -print
  11. -depth选项,先在目录所有文件中查找,再进入子目录查找:
    find . -name "aa.txt" -depth -print
  12. -mount选项,只在当前文件系统中查找,不进入其他文件系统中查找:
    find . -name "aa.txt" -mount -print
  13. -cpio选项,将找到的文件备份到磁带上,是否常用?
  14. -exec command选项,对查找到的文件执行某个命令,注意最后要加上{} \;
    find . -type f -mtime +5 -exec grep "abc" {} \;

xargs常见示例

以下示例在AIX中都测试过

  1. 是用于结构化参数列表的命令,主要用于在前一个命令的输出作为后一命令的输入时,前一个命令的输出结果很多可能导致后一命令的输入溢出,因此配合对输出结果进行结构化整理以满足一批一批地输入。
  2. 由于传递给-exec选项的命令长度有限制,所以当find查找出的文件太多可能导致-exec选项“参数列溢出”错误时,可使用xargs命令,在执行时会分批将输入的值传递给指定命令:
    find . -type f -mtime +5 -print | xargs grep "abc"

参考资料

[1]: 《SHELL编程入门》:第2章 使用find和xargs;
[2]: 《UNIX? Shells by Example Fourth Edition》;
[3]: 【UNIX/LINUX 系统操作手册】:[man find];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值