linux 命令深入 — find

教程君
• 阅读 263

find 命令,大致语法:find [<start-path>...] [<expr>...]。其本质是用指定表达式逐个评估起始路径(默认当前目录)下的所有文件,并返回最终结果为 true 的文件路径。后者是相对的还是绝对的取决于起始路径的相对/绝对情况

所以 find 命令的核心是逻辑表达式的执行,子表达式间的顺序会影响最终结果。子表达式可细分为:option、test、action,彼此间以操作符串联,无操作符则等同于-a,形如:
<option> [<oper>] <test> [<oper>] <action> ...

操作符

以下操作符按优先级从高到低排列:

  • \( <expr>... \):注意此处括号须被转义,且与内部表达式间留有空格
  • -not <expr>:取反
  • <expr1> -a <expr2>:表示和
  • <expr1> -o <expr2>:表示或,前一个表达式为 true 时后一个不再执行

option

必返回 true,并将影响当前指令的整体执行。-daystart-L-regex-type除外,后者仅影响指定在其之后的 test 的执行。常用 option 如下:

-L:后续的测试以及打印均针对软链接指向的文件,默认仅针对软链接本身

-mount:将挂载盘从查找范围中排除

test

用于逐个测试(匹配)起始路径下的所有文件,满足则返回 true,否则返回 false。常用 test 如下:

  • -mtime {+|-}<n>:上一次内容更新距今超过/少于 n*24 小时(atime、ctime 同理)
  • -newer <filepath>:内容比指定文件更早更新(anewer、cnewer 同理)
  • -user <uname>:属于指定用户(用户名或 ID)
  • -nouser:不属于任何用户
  • -group <gname>:属于指定组(组名或组 ID)
  • -nogroup:不属于任何组
  • -name <pattern>:其名称(basename)匹配指定模式
  • -path <pattern>:其路径匹配指定模式,注意该路径是相对还是绝对的取决于起始路径的相对/绝对情况
  • -type <char>:指定文件类型,对应关系如下

    • f:普通文件
    • d:目录
    • l:链接
    • b:块设备
    • c:字节设备
    • s:sockets
    • p:FIFO
  • -size {+|-}<n>:文件大小大于/小于指定数值。可用单位如下:

    • c:byte
    • w:2-byte
    • b:默认单位,512-byte
    • k:Kb
    • M:Mb
    • G:Gb

action

为当前评估结果为 true 的文件执行指定操作,返回 true 或 false 取决于具体 action。常用 action 如下:

  • -exec <command> \;:将该文件按占位符{}代入指定指令中执行,注意以\;收尾。若执行成功则返回 true
  • -prune:若该文件为目录,则不在其下继续展开。必返回 true

实例

  • 找出root/.vscode-server目录下的名为machineid的文件,且后者确定不在其binextensions子目录中:

    find /root/.vscode-server \( \
    -path '/root/.vscode-server/bin' -o \
    -path '/root/.vscode-server/extensions' \
    \) -prune -o -name machineid -print
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
linux find 命令查找文件和文件夹
查找目录:find/(查找范围)name'查找关键字'typed查找文件:find/(查找范围)name查找关键字print详解:find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
Aaron445 Aaron445
4年前
46个Linux面试常见问题送给你
问题一:绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令?答案:绝对路径:如/etc/init.d当前目录和上层目录:./ ../主目录:/切换目录:cd
Stella981 Stella981
3年前
Linux的一些很有用的命令或者方法(持续更新)
0.重启(reboot)、关机(shutdown,halt)等,其中立刻关机:立刻关机:shutdownh01\.find命令:很强很重要语法:find\起始目录\寻找条件 操作find/文件名(这样做经常找不到文件,而且还浪费时间。不知道有么有更好的方式。)批量查找文件中的字符串: find|
Wesley13 Wesley13
3年前
Java项目读取resources资源文件路径那点事
  今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑。正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径。在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例: !(https://oscimg.oschina.net/o
Wesley13 Wesley13
3年前
Java中
javacclasspath的使用:javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上classpath参数,通过使用以下三种类型的方法来指导编译器在编译的时候去指定的路径下查找引用类。(1).绝对路径:javac
Wesley13 Wesley13
3年前
LINUX基础命令
命令格式:命令关键字选项参数lsl/etc(find/etcnamepassword)帮助命令:manhelpinfocd切换目录cd..cd绝对路径:从根目录/etc/passwd相对路径:从当前目录./../\root@localhost~\root用户名localhost主机名
Stella981 Stella981
3年前
Linux dirname、basename 指令
一、dirname指令1、功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)2、用法:dirnamefilename例如下面几个例子(1)dirname/etc/sysconfig/networkscripts/ifcfgeth0/etc/sysconfig/network
Wesley13 Wesley13
3年前
2 linux笔记 文件目录管理
2linux笔记文件目录管理2.1Linux文件与目录管理2.1.1绝对路径:路径的写法,由根目录/写起,例如:/usr/share/doc这个目录。2.1.2相对路径:路径的写法,不是由/写起,例如由/usr/share/doc要到/usr/sh
Stella981 Stella981
3年前
Linux find 命令详解
Linux上的 find 命令是 findutil 软件包的一部分,一般已经默认集成在了几乎所有的发行版中。find命令有非常大的灵活性,可以向其指定丰富的搜索条件(如文件权限、属主、属组、文件类型、日期和大小等)来定位系统中的文件和目录。此外,find还支持对搜索到的结果进行多种类型的命令操作。一、简介
Stella981 Stella981
3年前
Linux文件路径、cd命令、mkdir、rmdir、rm命令
第二章文件、目录管理2.6相对路径和绝对路径相对路径相对路径就是相对当前目录来说的,比如我当前在/root下,那么要表示/root/213/可以直接ls213/绝对路径绝对路径是从/(也被称为根目录)开始的,比如/usr、/etc
Stella981 Stella981
3年前
Perl文件、目录常用操作
注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象。创建文件在unix类操作系统中有一个touch命令可以非常方便的创建文件,还能批量创建一些名称规律的文件。但实际上touch的主要介绍中却是"修改文件时间戳",创建文件只不过是它的辅助能力。如果没有touch命令