find 简易手册

(0 comments)

Find是用于搜索文件的工具,通常在Shell脚本中配合管道来使用,可以实现很多功能。

先列出常用参数:

  • 文件名
-name a.txt	# 配置文件名称
-iname a.txt	# 匹配文件名称,但对大小写不敏感
  • 时间
-amin -10	# 查找系统中最后10分钟访问的文件
-atime -2	# 查找系统中最后2天访问的文件
-cmin 2	        # 查找系统中最后2分钟被改变状态的文件
-ctime 1	# 查找系统中最后1天被改变状态的文件
-mmin -5	# 查找系统中最后5分钟里修改过的文件
-mtime -1	# 查找系统中最后1天里修改过的文件
-mtime +7	# 查找系统中7天没有被修改过的文件
  • 文件尺寸
-size +100k	# 查找文件大小超过100K的
-size -100K	# 查找文件大小小于100K的
  • 用户和组
-uid 500	# 查找系统中属主的UID为500的文件
-user liaojl	# 查找系统中属于liaojl这个用户的文件
-gid 500	# 查找系统中属组的GID为500的文件
-group LIAOJL 	# 查找系统中属于LIAOJL组的文件
-nouser	        # 不属于任何用户的文件
-nogroup 	# 不属于任何组的文件
  • 逻辑判断
-false		# 查找系统中总是错误的文件
-empty		# 查找系统中为空的文件或者文件夹
-type f	# 查找文件的类型是文件
  • 递归目录
-maxdepth 2	# 查找当前指定目录和下一级目录共2级目录
-mindepth 2	# 查找时忽略当前目录下2级目录的内容

查找时还可以指定条件进行逻辑运算:

-and		# 条件“与”
-o		# 条件“或”
!		# 条件“非”

对查找结果还可以执行以下处理命令:

-exec cmd	# 查找并执行命令
-ok cmd         # 给用户命令执行操作,根据用户的 Y 确认输入执行
-printf         # 打印文件格式
-ls	        # 显示文件类似 ls -a 命令获得的详细信息

按文件名搜索

查找特定文件名的文件,支持正则表达式。

find . -name [A-Za-Z]ib			# 匹配任何单个字母
find . -name [A-Za-Z]\*.py		# 匹配任何多个字母
find . -name "a b"				# 查找文件名中包含空格的文件

按权限搜索

查找特定权限位的文件,例如查找所有 suid 和 sgid 的文件。

find . -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

按时间搜索

创建两个指定时间的文件,然后和这两个文件比较。

touch -t 0203301230 starttemp     # 开始时间为 2002年3月30日 12点30分
touch -t 04241220 endtemp         # 截止时间为今年 4月24日 12点20分
find . -newer starttemp -a ! -newer endtemp -exec ls -l {} \;

查找半年前的文件。

find / -mtime +180 -exec ls {} \;

删除半年前的文件。

find / -mtime +180 -exec rm {} \;

按文件大小搜索

查找指定大小范围的文件。

find . -type f -size +500k -and -size -1000k    # 文件大小为 500K 到 1000K

逻辑判断

多个条件与、或、非的逻辑判断。

find /tmp -size +160000k -and -mtime +2
find / -name "*Myname*" -o -name "*myname*"
find /tmp ! -user panda

处理查询结果

-exec

find 命令的 -exec 参数将查询结果送给命令去处理,其中 {} 表示结果集,\; 是 -exec 必须的参数。

find . -name "tmp* -exec rm {} \;                    # 查找并删除匹配 tmp* 的文件
find . -name cvs -exec rename cvs CVS {} \;           # 重命名所有 cvs 目录为 CVS
find . -user panda -exec chown -R danile.user {} \;   # 更改用户 panda 的文件属主
find . -name "*.pdf,v" -exec mv {} /backup \;         # 删除当前目录下的 *.pdf,v 文件
find . -group phoenix -exec chown :wpsh {} \;         #将所有属于phoenix组的文件更改为wpsh组
find . -exec grep -l "grep" {} \;  # 查找包含指定字符串的文件,例如查找当前目录及所有子目录中包含字符串 'Daniel' 的文件。

xargs

xargs 命令可以将 find 的查询结果生成为参数交给命令去处理,如果命令支持处理多个参数,这样就只需要执行一次命令,可以大大提高效率。当时 xargs 如果碰到文件名有空格时会遇到问题,因为它是根据空格区分参数的。

除非你能保证文件名没有空格,并且很在乎处理效率,否则建议使用 -exec 方式处理。

查找文件内容包括指定字符串的文件名,使用 xargs 防止传入参数过多导致溢出。

find . -type f -print | xargs fgrep 'Find this string'

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required