linux find命令可以根据各种条件查找文件,还可以进一步执行操作。本文记录find一些常用的参数,以及一些常用例子。
本文所用find版本如下:
find --version
find (GNU findutils) 4.5.11查找条件
可以组合多个查找条件来查找
文件名
# 通配匹配(非正则表达式)
find ./ -name "*.txt"
# 不区分大小写
find ./ -iname "test"
# 正则匹配
find ./ -regex ".*bar."文件路径
find ./ -path "*123*"文件类型
find ./ -type ftype可选的类型为:
- d: 目录
- f: 文件
- p: 管道
- l: 软连接
- b: 块设备
- c: 字符设备
- s: 套接字文件
- p: 管道文件(pipe)
文件大小
# 查找大于100M的文件
find ./ -size +100M+表示大于,-表示小于
可选单位:
- b 512 byte块(默认单位)
- c 字节(字符个数)
- w 2字节,词
- k
- M
- G
文件时间
时间(stat)
- 访问时间 a(Access)
- 修改时间 m(Modify)
- 状态改变 c(Change)
单位
- 分钟 min
- 天 time
大小
- 大于 +
- 小于 -
# 修改时间小于5分钟
find ./ -mmin -5
# 访问时间大于30天
find ./ -atime +30相对时间
# 比某个文件更新修改
find ./ -newer ./test
# 比某个文件更旧修改(包含本身)
find ./ -not -newer ./test文件权限
-perm mode 严格匹配-perm +mode 已弃用的旧方法(建议使用-或/)-perm /mode 任意匹配-perm -mode 所有匹配
# 匹配权限等于644的文件
find -perm 644
find -perm u=rw,g=r,o=r
# 匹配所有权限大于或等于644的文件,700不满足条件
find -perm -644
find -perm -u=rw,g=r,o=r
# 匹配任意权限大于或等于644的文件,700满足条件
find -perm /644
find -perm /u=rw,g=r,o=r-readable 可读-writable 可写-executable 可执行
find -readable
find -writable
find -executable属主属组
-user 用户名-uid 用户id-group 用户组-gid 用户组id
-nogroup  无对应属组-nouser  无对应属主
空文件或目录
find ./ -empty
# 非空文件
find ./ -not -empty -type f多条件组合
-a and 逻辑与操作,优先级最高-o or 逻辑或操作-not 逻辑非
# 查找文件或文件夹
find ./ -type f -o -type d   
# 查找大于1M小于10M的文件(测试时发现这样写是小于9M,不是10M,有误差)
find ./ -size +1M -a -size -10M  
# 排除路径中带test的文件
find ./ -not -path "*test*"参数
递归软连接
-P 不递归软连接(默认)-L 递归软连接
查询深度
最大深度maxdepth
find ./ -maxdepth 1 -type f最小深度mindepth
find ./ -mindepth 2  -type f操作
交互式执行
每个操作都需要y,n确认
find . -ok ls -l {} \;                                                                                                                         
< ls ... . > ? 
< ls ... ./t1 > ? y
-rw-r--r-- 1 freeze freeze 0 Jun 15 11:37 ./t1
< ls ... ./t3 > ? y
---------- 1 freeze freeze 0 Jun 15 11:37 ./t3
< ls ... ./t2 > ? y
-rwx------ 1 freeze freeze 0 Jun 15 11:37 ./t2
< ls ... ./t4 > ? y
-rwxrwxrwx 1 freeze freeze 0 Jun 15 11:38 ./t4
# okdir 进入目录执行执行命令
# 在当前目录下执行
find . -exec echo {} \;
# 进入到匹配目录执行
find . -execdir echo {} \;
# 结合xargs
find . -type f | xargs -I {} ls -l {}格式化输出
tree /home/freeze/tmp_path   
/home/freeze/tmp_path
├── test1
│   └── 1.txt
└── test2
# 输出绝对路径
find /home/freeze/tmp_path -printf "%p\n"                                                                                                      
/home/freeze/tmp_path
/home/freeze/tmp_path/test1
/home/freeze/tmp_path/test1/1.txt
/home/freeze/tmp_path/test2
# 输出basename
find /home/freeze/tmp_path -printf "%f\n"                                                                                                      
tmp_path
test1
1.txt
test2
# 输出dirname
find /home/freeze/tmp_path -printf "%h\n"                                                                                                      
/home/freeze
/home/freeze/tmp_path
/home/freeze/tmp_path/test1
/home/freeze/tmp_path
# 输出匹配内容路径(不包括绝对路径前缀)
find /home/freeze/tmp_path -printf "%P\n"                                                                                                      
test1
test1/1.txt
test2其它操作
-delete  删除匹配文件-ls  同ls,显示文件信息-fprint file 匹配结果输出到文件-print0 输出不换行
          赏
          
            
              
              使用支付宝打赏
            
            
              
              使用微信打赏
            
          
        
        若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
