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
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 命令可以将 find 的查询结果生成为参数交给命令去处理,如果命令支持处理多个参数,这样就只需要执行一次命令,可以大大提高效率。当时 xargs 如果碰到文件名有空格时会遇到问题,因为它是根据空格区分参数的。
除非你能保证文件名没有空格,并且很在乎处理效率,否则建议使用 -exec 方式处理。
查找文件内容包括指定字符串的文件名,使用 xargs 防止传入参数过多导致溢出。
find . -type f -print | xargs fgrep 'Find this string'
Comments
There are currently no comments
New Comment