find命令用于在系统中查找文件,配合 -exec 选项或 xargs命令还能对查找到得文件执行一些列的自动化操作。
基本格式:find [-H] [-L] [-P] [path...] [expression]
path指定起始搜索路径,可以指定多个,exprssion表示搜索表达式,包含选项及选项参数。
[TOC]
-depth n (mac os): 指定只遍历深度为 n 的目录(相对起始目录),例如 1 表示只在当前目录搜索,2 表示只在当前目录的子目录中搜索,以此类推。
-maxdepth n: 指定最大遍历深度为 n。
-maxdepth n: 指定最小遍历深度为 n。
-name pattern: 搜索文件名匹配 pattern 的文件,例如 ‘*.txt‘ 匹配所有以 ‘.txt‘ 结尾的文件。
-path pattern: 搜索路径名匹配 pattern 的文件。
-type t: 搜索文件类型为 t 的文件。t 的可选值为:
b block special(块设备文件)
c character special(字符设备文件)
d directory(目录)
f regular file(普通文件)
l symbolic link(符号链接)
p FIFO(管道)
s socket(套接字)
-ls: 输出结果包括权限,大小,路径,创建者,创建时间等信息,类似命令 ls -dgils的输出结果。
i 前缀: 有很多带 i 前缀的选项,表示忽略大小写。例如 -iname,-ilname, -ipath, -iregex, -inum等。
-exec command [argument ...] ;: 执行命令 command,执行的上下文路径为搜索起始路径,这个表达式必须已分号结束。command可以带多个参数,如果命令名字或者参数名字出现 ‘{}‘ ,‘{}‘将会被当前文件的路径代替。需要注意的是在shell中执行此命令的时候,需要转义分号,可以用引号引号引起来或者在分号前面加 “\”号。
-execdir command [argument ...] ;: 同 -exec,区别是执行命令的上下文路径是当前文件所在的路径。
输出的文件路径格式跟指定的起始路径格式相关,如果起始路径的格式是相对路径,输出的结果就是相对路径,如果起始路径是绝对路径,输出的结果也是绝对路径。
$ pwd
/tmp
$ find . -name ‘*.txt‘
./1.txt
./2.txt
./3.txt
$ find /tmp -name ‘*.txt‘
/tmp/1.txt
/tmp/2.txt
/tmp/3.txt
把找出的文件拷贝到另外一个目录
# 先创建几个文件和目录
$ touch 1.txt 2.txt 3.txt
$ mkdir xxx
$ find . -maxdepth 1 -name ‘*.txt‘ -exec cp {} xxx \;
$ ls xxx
1.txt 2.txt 3.txt
# 这个更有趣,只要出现{}的地方都被当前文件的路径替换掉
$ find . -maxdepth 1 -name ‘*.txt‘ -exec cp {} xxx/{}.bak \;
$ ls xxx
1.txt 1.txt.bak 2.txt 2.txt.bak 3.txt 3.txt.bak
# 创建目录也可以这样
$ rm -rf xxx
$ makdir xxx && find . -maxdepth 1 -name ‘*.txt‘ -exec cp {} xxx \;
$ ls xxx
1.txt 2.txt 3.txt
注意的是,当把文件拷贝到 xxx 目录后,find 继续找 xxx目录下的 .txt 文件,然后执行拷贝,相当于:
$ cp xxx/1.txt xxx/1.txt
因为是同一个文件,所以会打印出警告信息,这里用 “-maxdepth 1” 指定只在起始目录查找,从而避免在 xxx 目录中查找。
原文:http://www.cnblogs.com/skeeter/p/3719937.html