find命令攻略

find命令在linux中的地位可谓举足轻重,所以了解该命令的常用用法自然必不可少,下面就是经常用到的参数用法(参照了《linux shell脚本攻略》):

1、-name:按 通配符匹配文件(-iname不区分大小写)。
示例:find /home/program/ -name "*.txt" -print
解释:查找/home/program目录下的所有以“.txt”结尾的文件,”-print“可省略。

更复杂一些,结合“-o”匹配多个文件:find . \( -name "*.txt" -o -name "*.pdf" \)
解释:找出当前目录下的以”.txt“或者”.pdf“结尾的文件,特殊字符”(“需要转义。

2、-regex:按 正则表达式匹配文件(-iregex不区分大小写)。
示例:find /home/program -regex ".*\(\.sh\|\.py\)$"
解释:查找/home/program目录下所有以”.sh“或者”.py“结尾的文件(注意对特殊字符进行转义)。

3、-path:按 通配符匹配文件路径(-ipath不区分大小写)。
示例:find ./ -path "*/linux/*"
解释:查找当前目录下含有”/linux/“的文件路径。

4、!:表示排除之意。
示例:find ./ ! -name "*.sh" -print
解释:查找当前目录下不以”.sh“结尾的文件。

5、-maxdepth depth:指定最大遍历的深度,1表示只搜索指定目录一层,2表示最多再往下搜索一层,依次类推(-mindepth depth:指定最小遍历深度)。
示例:find ~/program/ -maxpath 1 -name "*nu*" -print
解释:直接搜索~/program/目录下含“nu”的文件,不会继续遍历其中的目录,其实就相当于“ls ~/program | grep nu”。

6、-type:针对特定文件类型如普通文件(f)、目录(d)、字符设备(c)、块设备(b)、符号链接(l)、套接字(s)以及FIFO(p)等进行搜索。
示例:find . -type s -print
解释:搜索当前文件下的所有套接字文件。

7、-atime、-mtime、-ctime:根据文件时间进行搜索。Unix/Linux文件系统中的每一个文件都有三种时间戳,如下所示:
1)访问时间(-atime):用户最近一次访问文件的时间。
2)修改时间(-mtime):文件内容最后一次被修改的时间。
3)变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。
-atime、-mtime、-ctime可作为find的时间选项,它们可以用整数值指定,单位是天。这些整数值通常还带有 - 或 + :- 表示小于,+ 表示大于。
示例:
1)打印出在最近7天内被访问过的所有文件:find . -type f -atime -7 -print
2)打印出恰好在7天前被访问过的所有文件:find . -type f -atime 7 -print
3)打印出访问时间超过7天的所有文件:find . -type f -atime +7 -print
类似地,我们可以根据修改时间,用-mtime进行搜索,也可以根据变化时间,用-ctime进行搜索。

8、-amin、-mmin、-cmin:用法同-atime、-mtime、-ctime,不过是以分钟为单位。

9、-newer:找出比指定的参考文件更新的(更近的修改时间)所有文件。
示例:find ./ -type f ! -newer test.sh
解释:搜索出当前目录下比test.sh 更旧(还记得“!”吗?)的普通文件。

10、-size:根据文件大小搜索。
示例:
1)搜索大于2KB的文件:find . -type f -size +2k
2)搜索小于2KB的文件:find . -type f -size -2k
3)搜索大小等于2KB的文件:find . -type f -size 2k
除了k之外,还可以用其他文件大小单元:
1)b —— 块(512字节)。
2)c —— 字节。
3)w —— 字(2字节)。
4)k —— 1024字节。
5)M —— 1024K字节。
6)G —— 1024M字节。

11、-delete:删除搜索出来的文件。
示例:find ./ -type f -name "*.sh~" -delete
解释:删除当前目录下所有的sh备份文件。

12、-perm:按文件权限进行搜索。
示例:find .. -type f -name "*.php" ! -perm 644
解释:搜索当前目录下权限不为(因为加了“!”)644的php文件。

13、-user:搜索属于某用户或UID的文件。
示例:find /tmp -type f -user root -print
解释:查找/tmp目录中属于root的普通文件。

14、-exec:对搜索出的每个文件执行命令(注意格式,尤其是末尾的“\;”)。
示例1:find . -type f -user root -exec chown test {} \;
解释:将当前目录下属于root用户的普通文件的所有者更改为test用户。
注意:在这个命令中,{}是一个与-exec选项搭配使用的特殊字符串。对于每一个匹配的文件,{}会被替换成相应的文件名。
示例2:find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
解释:将10天前的 .txt文件复制到OLD目录中。
示例3:-exec能够同printf结合来生成有用的输出信息。例如:
find . -type f -name "*.txt" -exec printf "Text file: %s\n" {} \;
小计巧:在-exec参数中无法直接使用多个命令,它只能够接受单个命令,不过我们可以把多个命令写到一个shell脚本中(例如command.sh),然后在-exec中使用这个脚本:
-exec ./commands.sh {} \;

15、-prune:跳过特定目录或文件。
示例:find devel/source_path \( -name ".git" -prune \) -o \( -type f -print \)
解释:打印出不包括在.git目录中的所有文件。\( -name ".git" -prune \)的作用是用于进行排除,它指明了 .git目录应该被排除在外,而\( -type f -print \)指明了需要执行的动作,这些动作需要被放置在第二个语句块中。

猜你喜欢

转载自aisxyz.iteye.com/blog/2332948
今日推荐