find和xargs学习笔记
目录
简介
find
是Unix环境下用于查找文件的一个功能强大的工具,可以按照很多种条件进行筛选,如文件权限、属主、大小、修改时间等等。xargs
是用于结构化参数列表的命令,主要用于在前一个命令的输出作为后一命令的输入时,前一个命令的输出结果很多可能导致后一命令的输入溢出,因此配合对前一命令输出结果进行结构化整理以便一批一批地输入。
基本使用方法
find格式
- 基本格式和说明:
find [ -H | -L] Path ... [-options ][-print -exec -ok]
;-H
为可选项,不常用,用法待补充?;-L
为可选项,不常用,用法待补充?;Path
为find命令作用的路径,可以是相对路径也可以是绝对路径。如.
表示当前目录及子目录,~
表示在$HOME目录;-options
为可选的选项,可以同时使用多个选项,每个选项前要加‘-’,如-name
、-user
、-mtime
、-type
等等。
find常见示例
以下示例在AIX中都测试过
-name
选项,查找文件名为一定格式的文件,
EX1:在当前目录查找文件名后缀为”.txt“的文件:
find . -name "*.txt"
EX2:查找前三位为小字字母第4位为数字的且总长为4位的文件:
find . -name "[a-z][a-z][a-z][0-9]"
-perm
选项,按文件权限位查找,格式find Path -perm [-] Mode
:- 在当前目录查找文件权限位绝对模式为755的文件:
find . -perm 755
; - 在当前目录查找比绝对模式004更多权限的文件:
find . -perm -004
;
- 在当前目录查找文件权限位绝对模式为755的文件:
-prune
选项,在查找时忽略某个目录,在”/apps”目录中查找但不查找“/apps/bin”目录
find /apps -name "/apps/bin" -prune -o -print
-user
和-nouser
选项,-user
为查找文件属主为指定用户(示例中用户为“dave”)的文件,-nouser
为查找无有效文件属主的文件:
find . -user dave -print
find . -nouser -print
-group
和-nogroup
选项,-group
为查找文件所属用户组为指定组名(示例中组为“accts”)的文件,-nogroup
为查找无有效文件所属用户组的文件:
find . -group accts -print
find . -nogroup -print
-mtime [-/+]n
选项,按文件的修改时间来查询,-n
和+n
分别表示在n天内和n天前,下例为在当前目录查询修改时间为5天前的文件:
find . -mtime +5 -print
-atime [-/+]n
选项,按文件的访问时间来查询,-n
和+n
分别表示在n天内和n天前,下例为在当前目录查询访问时间为5天前的文件:
find . -atime +5 -print
-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
- 配合使用
-type Type
选项,查找指定类型的文件Type
类型有[bcdflps],如下查找普通文件:
find . -type f
-size [-/+]n[c]
选项,按照文件大小查找,[-/+]
为可选输入,表示小于或大小指定大小,[c]
为可选输入,在未输入时文件大小单位默认为块(一块=512字节),输入后单位为字节,如下示例找大于100字节的文件:
find . -size +100c -print
-depth
选项,先在目录所有文件中查找,再进入子目录查找:
find . -name "aa.txt" -depth -print
-mount
选项,只在当前文件系统中查找,不进入其他文件系统中查找:
find . -name "aa.txt" -mount -print
-cpio
选项,将找到的文件备份到磁带上,是否常用?-exec command
选项,对查找到的文件执行某个命令,注意最后要加上{} \;
:
find . -type f -mtime +5 -exec grep "abc" {} \;
xargs常见示例
以下示例在AIX中都测试过
- 是用于结构化参数列表的命令,主要用于在前一个命令的输出作为后一命令的输入时,前一个命令的输出结果很多可能导致后一命令的输入溢出,因此配合对输出结果进行结构化整理以满足一批一批地输入。
- 由于传递给
-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];