find [options] [expressions] 2>/dev/null

  # -nouser(无属主) -nogroup(无属组)
  # -o: 逻辑或 \( expr \) -or \( expr \)
  # -a: 等价于 expr expr
  # -not: 等价于 !\( expr \)
  # -iname: 可以使用通配符(\转义).简单的名称(无通配符的)无需加引号!
  # -type:  l表示链接, d:目录, f:文件; -type d -empty :空目录
  # -size:  如'-size +10M': 表示大于10M的文件.c:字节,k:千字节,G:吉字节
  # -mmin:  如'-mmin -120': 表示2个小时内被modify过的文件. -amin:access, -cmin:change, -mtime:以天计
  # -perm:  如'-perm -4000': 表示具有setuid权限的文件
  # -user:  如'-user lei': 属用户leiz的所有文件, -uid:文件所有用户的uid, -gid:文件所属组的组id, -group:文件所属组
  # -maxdepth: 最大深度,1表示仅进入一层目录.
  # -iregex: 如使用扩展的regex,不区分大小写: find -regextype posix-extended -iregex pattern
  # -delete: 查找到后删除(若是'-type d'则仅能删除空目录)!注意,放在命令的最后,且不能与-prune一起使用!

搜索时排除某几个目录;

注意:-path后面的路径其最后不要加/!

find / \( -path "/home/leiz" -o -path "/home/lei" \) -prune -o -name *.txt

查找完成后打印

  # -ls -print -print0 -fprintf`
  # -print: 无需指定,默认就会打印每一个查找到的item,并且在该item后加换行.  -print0:打印时不会对每个item后加换行而是加上\0,以表示该item的结束.注意,为了保持兼容性,在与xargs配合时(-0:用null表分隔符)
  # -printf format: 按格式打印,注意不会自动加\n.格式太多,参考man.
  # -fprint f: 把查找到的文件的全路径名写到文件f.没有将创建,有将被truncate!

xargs

  • -exec: 执行命令
  • -ok: 执行命令前询问

名字用引号括起来是为了防止shell路径名扩展!

  find . -name "a*" -print0 -o -name b* -print0 | xargs -0 wc -l  find . -name "a*" -print0 -o -name b* -exec wc -l {} \;
  find . -type d -empty -name "*eadir*" -print0 |xargs -0 rm -fr "{}"