Find命令-Linux系统搜索利器

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


以上多个参数在命令后面的位置是有区别的,它们的位置决定了搜索的逻辑,也影响搜索的效率,比如限定搜索目录范围应该优先于限定搜索文件的名字

实际使用还需要从搜索逻辑来考虑多个影响因素,进而加快搜索速度,提高搜索效率

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏酷玩时刻

CentOS vi/vim编辑器常用命令与用法总结

http://www.cnblogs.com/jiayongji/p/5771444.html

643
来自专栏锦小年的博客

python学习笔记9.2-文件及文件夹操作

本文主要介绍python对文件以及文件夹的操作,主要涉及到文件的创建、读取、文件内容的修改、删除,文件夹的索引、目录的判断等等。此节内容非常重要,是以后编程的基...

1906
来自专栏Vamei实验室

Python标准库03 路径与文件 (os.path包, glob包)

路径与文件的简介请参看Linux文件系统 os.path包 os.path包主要是处理路径字符串,比如说'/home/vamei/doc/file.txt',提...

1988
来自专栏jerryteng的专栏

学习Go语言-GOPATH有多工作区的问题

首先在查找依赖包的时候,总是会先查找 GOROOT目录,也就是go语言的安装目录,如果没有找到依赖的包,才到工作区去找相应的包。

2133
来自专栏AILearning

Apache Zeppelin 中 Alluxio 解释器

概述 Alluxio是以内存为中心的分布式存储系统,能够以集群框架的速度实现可靠的数据共享。 配置 Name Class Descr...

1888
来自专栏编程微刊

如何快速修改网页上的文字?

1734
来自专栏应兆康的专栏

每天一个Linux命令(1)—— ls

ls ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 语法 ls(选项)(参数) ...

35010
来自专栏云飞学编程

python爬虫小知识,中文在url中的编码解码

有时候我们做爬虫经常会遇到这种编码格式,大概的样式为 %xx%xx%xx,对于这部分编码,python提供了一个quote的方法来编码,对应的解码为unquot...

643
来自专栏从零开始学自动化测试

appium+python自动化42-微信公众号webview操作

上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困...

781
来自专栏小狼的世界

PHP处理回车换行时应该注意的一个问题

在我们的数据入库、出库的时候要特别注意这个问题,特别是在进行显示处理的时候,比如使用表单中的 textarea 进行了一段文字的提交,客户端是Windows的话...

561

扫描关注云+社区