Find命令-Linux系统搜索利器
时间:2022-05-03
本文章向大家介绍Find命令-Linux系统搜索利器,主要内容包括1.Motivation、2.Explanation & Example、3.Notice、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1.Motivation
搜索查找是管理文件系统常用的操作,虽然动作逻辑本质上是匹配,很简单,但搜索也有很多种花样,可以用来加速搜索,快速提取想要的内容
- 最简单的搜索:你想递归遍历从当前目录下所有子目录以及子目录下的文件,得以了解这个目录组织结构
- 基于文件名的搜索:你想递归搜索从当前目录下所有拥有特定文件名或者后缀的文件
- 基于文件路径的搜索:你想递归搜索从当前目录下所有拥有特定路径名的路径
- 文件名反向排除的搜索:你不知道目标文件可能是什么但可以确定目标文件绝不是什么,需要将不可能的文件排除在外
- 目录范围模糊的搜索:当你可以确定目标文件在当前目录下的多少级范围内且目录层次较深时,超过一定级数范围的目录就可以不必搜索
- 基于文件类型的搜索:你也许只是想要搜索目录,或者链接,或者字符设备等等,其他文件类型就可以不必搜索
- 基于文件时间的搜索:你可能刚刚改动了许多文件但不记得名字,那么在过去的一个时间范围上对文件的三个时间进行搜索:访问时间,修改时间,变化时间
- 基于文件大小的搜索:如果一个目录的体积很大,你想要知道在这个目录中哪些文件是大文件
- 基于文件权限的搜索:对可读、可写、可执行以及用户访问差异来搜索文件
- 搜索并对结果执行一系列命令:繁琐任务自动化
2.Explanation & Example
- 最简单的搜索:
find . #从当前目录开始递归遍历所有子目录以及下面的文件,打印出来
- 基于文件名的搜索:
find . -name "hello.txt" #从当前目录开始递归向下搜索名为hello.txt的文件
find . -name "*.txt" #从当前目录开始递归向下搜索后缀名为txt的文件
find . -iname "hello*" #从当前目录开始递归向下搜索名为hello和HELLO的文件
find . ( -name "*.txt" -o -name "*.pdf" ) #从当前目录开始向下递归搜索后缀名为txt或者pdf的文件
- 基于文件路径的搜索:
find . -path "*/test/*" #从当前目录开始向下递归搜索包含test路径名的路径
- 文件名反向排除的搜索:
find . ! -name "*.txt" #从当前目录开始向下递归搜索非txt文件
- 目录范围模糊的搜索:
find . -maxdepth 3 -name "*.txt" #从当前目录开始向下递归搜索最大3层目录范围内包含的txt文件
find . -mindepth 2 -name "hello*" #从当前目录的下一级目录开始向下递归搜索名字包含hello的文件
find . ( -name ".git" -prune ) -o ( -type f ) #从当前目录开始向下递归搜索除了.git目录的其他所有目录以及包含的文件
- 基于文件类型的搜索:
find . -type d #从当前目录开始向下递归搜索目录文件
find . -type f #从当前目录开始向下递归搜索普通文件
find . -type l #从当前目录开始向下递归搜索链接文件
find . -type s #从当前目录开始向下递归搜索套接字文件
find . -type b #从当前目录开始向下递归搜索块设备
find . -type c #从当前目录开始向下递归搜索字符设备
find . -type p #从当前目录开始向下递归搜索FIFO文件
- 基于文件时间的搜索:
find . -atime -7 #搜索7天以内访问过的文件
find . -atime 7 #搜索正好7天前访问过的文件
find . -atime +7 #搜索7天以前访问过的文件
find . -ctime 7 #搜索正好7天前改变的文件
find . -mtime 7 #搜索正好7天前修改的文件
find . -amin 7 #搜索正好7分钟前访问过的文件
find . -newer file.txt #搜索比file的修改时间更新的文件
- 基于文件大小的搜索:
find . -size +2k #搜索等于2k的文件
find . -size -2k #搜索小于2k的文件
find . -size 2k #搜索等于2k的文件
文件大小的单位是b(512B),c(B),w(2B),k(1024B),M(1024k),G(1024M)
- 基于文件权限的搜索:
find . -perm 644
find . -user neo
- 搜索并对结果执行相关命令:
find . -name "*.txt" -delete #从当前目录开始向下递归搜索txt文件并删除
find . -name "*.c" -exec cat {} ; > all_c_files #从当前目录开始向下递归搜索c文件并将所有的内容汇聚到all_c_files
find . -mtime +10 -name "*.txt" -exec cp {} OLD ; #从当前目录开始向下递归搜索10天以前修改过的txt文件并将他们复制到OLD文件夹中
find . -type f -name "*.txt" -exec ./command.sh {} ; #从当前目录开始向下递归搜索txt文件并交给command.sh作为参数执行
3.Notice
以上多个参数在命令后面的位置是有区别的,它们的位置决定了搜索的逻辑,也影响搜索的效率,比如限定搜索目录范围应该优先于限定搜索文件的名字
实际使用还需要从搜索逻辑来考虑多个影响因素,进而加快搜索速度,提高搜索效率
- 基础篇章:关于 React Native之 ActivityIndicator 组件的讲解
- 基础篇章:关于 React Native 之 KeyboardAvoidingView 组件的讲解
- 基础篇章:关于 React Native 之 Slider 组件的讲解
- Java9 中的 9 个新特性
- ELK 集群 + X-Pack + Redis 集群 + Nginx ,实时日志(数据)搜集和分析的监控系统,简单上手使用
- 基础篇章:关于 React Native 之 Modal 组件的讲解
- 搭建高吞吐量 Kafka 分布式发布订阅消息 集群
- 你真的会用Retrofit2吗?Retrofit2完全教程
- 线程管理之获取和设置线程信息
- 线程创建和运行
- CentOs7.3 安装 MySQL 5.7.19 二进制版本
- Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava
- 3.Linux用户权限管理之三(文件与权限的设定)
- CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernates之Deployment滚动升级和回滚
- 简记特定容器list和forward_list算法
- Games101--Assignment2
- 快速学习-如何使用sentinel
- springboot-mybatis-demo遇到的坑
- 快速学习-Sentinel 工作主流程
- 快速学习-Sentinel 流量控制
- 快速学习-Sentinel 熔断降级
- C#中关于SqlDataAdapter的Update(dataTable)方法
- Jmeter保存下载的文件
- SNAP Java API处理Sentinel-1数据
- springboot开发spark-submit的java代码
- Kustomize ConfigMapGenerate自动生成ConfigMap中的坑
- Godot游戏开发实践之二:AI之寻路新方式
- Vue 侦听器 watch 扩展之立即触发回调、深度监听和注销