18.查找文件

locate: find files by name

find: search for files in a directory hierarchy

xargs: build and execute command lines from standard input

快速搜索路径名数据库
locate数据库被程序updatedb管理(作为一个cron工作例程)
手动更新数据库 sudo updatedb

搜索一个或多个目录

find ~

  • options
  • tests
  • actions

文件大小/文件名

文件类型

find ~ -type d | wc -l d限制为目录 f限制为普通文件

  • b 块设备文件
  • c 字符设备文件
  • d 目录
  • f 普通文件
  • l 符号链接

其他测试条件


  • -cmin n 最后修改时间(内容或属性)在n分钟 more than n :+n less than n: -n
  • cnewer file 最后修改时间(内容或属性)比file更近的
  • ctime n 最后修改时间在n*24小时
  • -empty 空文件或者目录
  • -group name 属于用户组name的文件或目录 name可以是group name或者GID
  • -iname pattern 类似于-name但是忽略大小写
  • -inum n 匹配inode号为n的文件
  • -mmin n 最后修改时间(内容)在n分钟
  • -mtime n 最后修改时间(内容)在n*24小时
  • -name pattern 匹配文件名符合通配符模式pattern的文件或目录
  • -newer file 内容修改新于file
  • -nouser 匹配不属于任何一个valid user的文件/目录
  • -nogroup 不属于任何一个valid group
  • -perm mode 匹配权限符合mode的文件或目录 mode可以用八进制或者符号表示法
  • -samefile name 匹配和文件name享有相同inode号的文件
  • -size n 匹配的文件大小为n
  • -type c 文件类型为c
  • -user name 属于用户name的文件或目录, name可以用用户名或者UID来表示

find ~ -type f -name "*.JPEG" -size +1M | wc - l

双引号引起来name模式 以防shell路径名展开

-size +1M 要求文件大小大于1M
减号意味着<
不带符号意味着精确匹配该大小
所有需要数值参数的测试条件都可以应用这种+/-表示法

文件大小的单位:

  • b 512个字节块 默认值
  • c 字节
  • w 两个字节的字
  • k 千字节
  • M 兆字节
  • G 千兆字节

预定义的操作

-delete 删除查找结果的文件和目录
-ls 类似于 ls 搜索结果
-print 打印出full pathname 默认操作 (and -print 恒真)
-quit 一旦找到一个匹配 退出

逻辑操作符

find ~ ( -type f -not -perm 0600 ) -or ( -type d -not -perm 0700 )
查找权限不是0600的文件或者不是0700的目录

-and 是隐含的 -a
-or -o
-not !
() Groups 控制优先级 注意需要转义


注意短路现象

用户定义的行为

-exec command {} ;
{} 代表了当前的pathname
分号是要求的界定符表明命令结束

等价于 -delete
-exec rm '{}' ';'

交互式地执行命令 使用-ok 会提示用户确定

提高效率

把分号改为加号

使用xargs

从标准输入接受输入, 把输入转换为一个特定命令的参数列表
find ~ -type f -print | xargs ls -l
xargs --show-limits

处理文件名中的空格
find ~ -iname ‘*.jpg’ -print0 xargs --null ls -l

stat: 加大马力的ls ,会显示系统对某个文件及其属性所知道的所有信息

选项

-depth 先处理目录中的文件,再处理目录自身 对于-delete行为是自动的

-maxdepth levels
-mindepth levels
指定find陷入目录中的深度

-mount 指导find不要搜索挂载在其他文件系统上的目录

-noleaf 不要基于搜索类Unix文件系统的假设来优化搜索
当搜索DOS/windows的文件系统和CD-ROMs需要指定