Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注:本文为 “Linux find / grep 命令” 相关文章合辑

未整理去重。


如何在 Linux 中查找文件

作者:Lewis Cowles
译者:LCTT geekpi
发布时间:2018 - 04 - 28 07:09

使用简单的命令在 Linux 下基于类型、内容等快速查找文件。

若为 Windows 或 OSX 的非资深用户,可能使用图形用户界面(GUI)查找文件。但 GUI 可能存在界面受限、令人沮丧等问题,用户可能需组织文件并记住其确切顺序。在 Linux 中,有多种处理方式。可以打开文件管理器并按下 Ctrl + F,也可用程序手动打开文件,还能输入字母过滤当前目录列表。

使用 Ctrl + F 在 Linux 中查找文件的截图
使用 Ctrl + F 在 Linux 中查找文件的截图

若不知文件位置且不想搜索整个磁盘,Linux 有合适的解决办法。

按命令名查找程序位置

若习惯随意放置文件,Linux 文件系统可能令人望而生畏。对部分用户而言,找到程序位置较难。例如,which bash 通常返回 /bin/bash;若下载程序但未在菜单中显示,which 命令是不错的查找工具。

类似工具 locate 命令,对查找配置文件有用。不过,像 locate php 这样的简单操作通常会返回大量结果,需进一步过滤。

有关 locatewhich 的更多信息,可参阅 man 页面:

  • man which
  • man locate

find 命令

find 工具功能更先进。以下是安装在许多服务器上的脚本示例,用于确保特定模式的文件(glob)仅存在五天,早于此的文件将被删除(自上次修改以来,保留最多 240 分钟的偏差):

find ./backup/core-files*.tar.gz -mtime +4.9 -exec rm {} \;

find 工具有许多高级用法,常见的是对结果执行命令,还能按类型、创建日期、修改日期过滤文件。

find 的另一个有趣用途是查找所有有可执行权限的文件,这有助于确保服务器安全,防止他人安装比特币挖矿程序或僵尸网络:

find /-perm/+x

有关 find 的更多信息,可使用 man find 参考 man 页面。

grep 命令

若想通过内容查找文件,Linux 已实现此功能。可使用许多 Linux 工具高效搜索符合模式的文件,grep 是常用工具之一。

假设程序发布代码引用和堆栈跟踪的错误消息,要在日志中查找这些内容。grep 并非总是最佳方法,但当文件为给定值时,常使用 grep -R

越来越多的集成开发环境(IDE)实现了查找功能,但在访问远程系统、无 GUI 或想在当前目录递归查找时,可使用:grep -R {searchterm};在支持 egrep 别名的系统上,只需将 -e 标志添加到命令 egrep -r {regex - pattern}


如何在 Linux 中使用 find

作者:Ben Cotton
译者:LCTT geekpi
发布时间:2018 - 05 - 16 08:37

使用正确的参数,find 命令是在系统上查找数据的强大而灵活的方式。

find 是功能强大、灵活的命令行工具之一。最简单的用法是从根路径开始查找:

find /

此命令将找到并打印出系统中的每个文件。由于在 Linux 中一切皆文件,会得到大量输出,这可能无法帮助找到所需文件。可改变路径参数缩小范围,但效果可能不比 ls 命令好。因此,需明确查找目标。

若想在主目录中查找所有 JPEG 文件,可使用 -name 参数将结果限制为与给定模式匹配的文件:

find ~ -name '*jpg'

若部分文件扩展名是大写的,可使用 -iname 参数,它与 -name 类似,但不区分大小写:

find ~ -iname '*jpg'

由于一些图片可能是 .jpeg 扩展名,可使用 “或”(-o)组合模式:

find ~ \( -iname 'jpeg' -o -iname 'jpg' \)

若存在以 jpg 结尾的目录,可使用 -type 参数修改命令来查找文件:

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f

若想找到这些命名奇怪的目录以便重命名,可使用:

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d

若想将范围缩小到上周更改的文件,可使用:

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7

可根据文件状态更改时间(ctime)、修改时间(mtime)或访问时间(atime)进行时间过滤,单位为天;若需更细粒度的控制,可使用分钟(分别是 cminmminamin)。除非确切知道所需时间,否则可能需在数字前加上 +(大于)或 -(小于)。

若磁盘空间不足,想在 log 目录下找到所有大于 1GB 的文件,可使用:

find /var/log -size +1G

若想在 /data 中找到 bcotton 拥有的所有文件,可使用:

find /data -owner bcotton

还可根据权限查找文件。若想在主目录中找到对所有人可读的文件,以确保不过度分享,可使用:

find ~ -perm -o=r

本文仅介绍了 find 命令的部分功能。将测试条件与布尔逻辑相结合,可提供难以置信的灵活性,准确找到所需文件。使用 -exec-delete 等参数,可让 find 对发现的内容采取行动。


Linux 下 find 递归列出文件或文件夹路径

发布于 2012 年 9 月 20 日 15:26

只列出常规文件

find ./-type f 

只列出文件夹

find ./-type d

对找到的所有文件进行批处理

find . -type f -exec chmod 644 {} \;  # 后面的 \; 必须的,标记 -exec 命令的结束
find . -type d -exec chmod 755 {} \;  # {} 表示找到的文件路径

继续查阅 man find 可获取更多信息。

-exec 命令:执行命令,若返回 0 状态,则为 true。要查找的所有以下参数都被视为命令的参数,直到遇到由 “;” 组成的参数。

字符串 “{}” 会被替换为正在处理的当前文件名,无论它在参数中的位置如何,而不仅仅是在单独的参数中,这与某些版本的 find 不同。

这两个构造可能需要转义(使用 “\”)或引用以保护。

指定的命令对每个匹配的文件运行一次。

该命令在起始目录中执行。

使用 -exec 操作存在不可避免的安全问题,可使用 -execdir 选项。

-exec 命令 {} +:此变体在选定文件上运行指定命令,命令行通过在末尾附加每个选定的文件名来构建,调用命令的总数将远少于匹配文件的数量。

命令行的构建方式与 xargs 类似。

该命令在起始目录中执行。

用户依云建议:用 zsh 时,输入 find -Tab 查看选项,选择 -type 后,再按 Tab 查看参数及其含义:

>>> find -type
-- file type --
b -- block special file
c -- character special file
d -- directory
f -- normal file
l -- symbolic link
p -- named pipe
s -- socket

用户 Blade 表示:若只是递归列出全部内容,使用 ls -R 即可。find 的强大之处在于其丰富的过滤条件,以及找到文件后的操作(如 -exec 参数和管道通向 xargs 等方法)。


linux 命令之 —find 用于指定目录下查找文件

xianjie0318 发布于 2017-03-25 13:43:34

find 命令作用

find 命令用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。若不设置任何参数,find 命令将在当前目录下查找子目录与文件,并显示所有查找到的子目录和文件。

find 语法

find path -option [-print] [ -exec -ok command ] {} [\];

参数说明:

  • find 根据规则判断 pathexpression,在命令列上第一个 -( )! 之前的部分为 path,之后的是 expression。若 path 为空字符串,则使用当前路径;若 expression 为空字符串,则使用 -print 作为默认 expression
    expression 中可使用的选项有二三十个,在此介绍最常用的部分。
  • -mount, -xdev:只检查和指定目录在同一个文件系统下的文件,避免列出其他文件系统中的文件。
  • -amin n:在过去 n 分钟内被读取过的文件。
  • -anewer file:比文件 file 更晚被读取过的文件。
  • -atime n:在过去 n 天内被读取过的文件。
  • -cmin n:在过去 n 分钟内被修改过的文件。
  • -cnewer file:比文件 file 更新的文件。
  • -ctime n:在过去 n 天内被修改过的文件。
  • -empty:空的文件。
  • -gid n-group namegidn 或是 group 名称是 name 的文件。
  • -ipath p, -path p:路径名称符合 p 的文件,ipath 会忽略大小写。
  • -name name, -iname name:文件名称符合 name 的文件,iname 会忽略大小写。
  • -size n:文件大小是 n 单位,b 代表 512 位元组的区块,c 表示字符数,k 表示千字节,w 是二个位元组。
  • -type c:文件类型是 c 的文件,d 表示目录,b 表示区块装置文件,p 表示具名贮列,f 表示一般文件,l 表示符号连结,s 表示 socket。
  • -pid nprocess idn 的文件。
  • 可以使用 ( ) 将运算式分隔,并使用下列运算:exp1 -and exp2! expr-not exprexp1 -or exp2exp1, exp2

find 案例

1.查找当前目录及其子目录下所有扩展名为 .c 的文件

find . -name "*.c"

img

2.查找当前目录及其子目录下所有最近 20 天内更新过的文件

find . -ctime -20

img

3.查找目录并列出目录下的文件(为找到的每一个目录单独执行 ls 命令,执行命令前需要确认)

find . -type d -ok ls {} \;

img

4.查找 /var/logs 目录中更改时间在 7 日以前的普通文件,并在删除之前询问

find /var/logs -type f -mtime +7 -ok rm {} \;

img

5.查找当前目录以及子目录中所有文件大于 10M 的普通文件,并列出它们的完整路径

find . -type f -size +10M -exec ls -l {} \;

img


Linux find 命令:查找文件或目录

没用的阿_吉 发布 2021-11-17 16:18:53

find 命令可以在命令的层次结构中查找文件和目录,可使用文件名、文件大小、修改时间和类型等条件进行查找。

find 命令的语法格式如下:

[root@bogon ~]\# find 搜索路径 [选项] 搜索内容

find 命令有两个参数,分别用于指定搜索路径和搜索内容。

find 命令可以根据不同的选项指定按照不同类型的搜索内容进行查找,选项的可选值如下:

按照文件名搜索

  • -name:按照文件名搜索。
  • -iname:按照文件名搜索,不区分文件名大小写。
  • -inum:按照 inode 号搜索。

注意,使用 find 命令进行搜索时,搜索的文件名必须和搜索的内容一致才能找到;Linux 中的文件名区分大小写,因此可以用 -iname 来搜索;每个文件都有 inode 号,若知道 inode 号,也可按照 inode 号来搜索文件。

按照文件大小搜索

-size [+ | -] n:按照指定大小搜索文件,查找大小大于 +n、小于 -n 或等于 n 的文件。n 代表 512 字节大小的数据块个数。

按照修改时间搜索

  • -atime [+ | -] n:按照文件访问时间搜索,查找访问时间已经超过 +n 天、低于 -n 天或正好等于 n 天的文件。
  • -mtime [+ | -] n:按照文件更改时间搜索,查找更改时间是在 +n 天之前、不到 -n 天或正好在 n 天之前的文件。

按照所有者和所属组搜索

  • -uid 用户 ID:按照用户 ID 查找所有者是指定 ID 的文件。
  • -gid 组 ID:按照用户组 ID 查找所属组是指定 ID 的文件。
  • -user 用户名:按照用户名查找所有者是指定用户的文件。
  • -group 组名:按照组名查找所属组是指定用户组的文件。
  • -nouser:查找没有所有者的文件。

按照文件类型搜索

  • -type d:查找目录。
  • -type f:查找普通文件。
  • -type l:查找软链接文件。

逻辑运算符

  • -a:表示 “and 逻辑与”,代表逻辑与运算,-a 的两个条件都成立,find 搜索的结果才成立。
  • -o:表示 “or 逻辑或”,代表逻辑或运算,-o 的两个条件只要其中一个成立,find 命令就可以找到结果。
  • -not:表示 “not 逻辑非”,是逻辑非,即取反。

【例 1】在目录下查找文件名为 test 的文件

[root@bogon demo]# find /-name test
/lib/alsa/init/test
/root/demo/test
/root/demo/test/test
/root/linux/test1/test
/usr/lib64/python2.6/test
/usr/bin/test

此命令查找出 / 根目录下文件名为 test 的所有文件。


Linux 命令之查找文件 find

二木成林 修改于 2022-05-29 00:24:08

概述

find 命令可以在目录层次结构中搜索符合指定条件的文件或目录,并对它们执行指定的操作。搜索条件可以是文件权限、文件类型、日期、大小等。

在这里插入图片描述

语法

该命令的语法如下:

# find 命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足条件的文件并对之采取相关的操作
find [指定起始目录] 查找条件 [操作]

该命令支持的选项有:

选项说明
-mount, -xdev只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n在过去 n 分钟内被读取过
-anewer file比文件 file 更晚被读取过的文件
-atime n在过去 n 天内被读取过的文件
-cmin n在过去 n 分钟内被修改过
-cnewer file比文件 file 更新的文件
-ctime n在过去 n 天内创建的文件
-mtime n在过去 n 天内修改过的文件
-empty空的文件 -gid n or -group namegidn 或是 group 名称是 name
-ipath p, -path p路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name文件名称符合 name 的文件。iname 会忽略大小写
-size n文件大小是 n 单位
-type c文件类型是 c 的文件

使用

按文件名查找文件

按文件名查找文件支持的选项有:

选项说明
-name < 指定文件名 >按指定文件文件名查找文件
-iname < 指定文件名 >按指定文件文件名查找文件,但忽略文件名的大小写

命令格式如下:

# 语法
find 指定起始目录 -name 指定文件名
# 示例
find /root/-name test.txt
find /root/-iname TEST.txt

在这里插入图片描述

按扩展名查找文件

按扩展名搜索文件与按名称搜索文件相同,都是使用 -name 选项,但需要用到通配符 *。如要匹配所有以 .txt 后缀结尾的文件,就要写成 -name *.txt。如果要查与正则表达式不匹配的所有文件,可以加上 -not 选项,即如果要查找所有不以 .txt 后缀结尾的文件,就要写成 -not -name *.txt

选项说明
-not EXPR不与正则表达式 EXPR 匹配的情况

语法如下:

# 语法
# 查找指定目录下所有以指定后缀结尾的文件
find 指定起始目录 -name * 指定后缀
# 查找指定目录下所有不以指定后缀结尾的文件
find 指定起始目录 -not -name * 指定后缀
# 示例
# 查找 /root/abc/ 目录下所有以.txt 为后缀结尾的文件
find /root/abc/-name *.txt
# 查找 /root/abc/ 目录下所有不以.txt 为后缀结尾的文件
find /root/abc/-not -name *.txt

在这里插入图片描述

按文件类型查找文件

有时您可能需要搜索特定文件类型,例如常规文件、目录或符号链接。在 Linux 中,一切都是文件。要根据文件类型搜索文件,请使用 -type 选项和以下描述符之一来指定文件类型:

文件类型描述符说明
f一个普通文件
d目录
l符号链接
c字符设备
b块设备
pFIFO
ssocket 文件

语法格式如下:

# 语法
find 指定起始目录 -type 文件类型描述符
# 示例,查找 /root/abc/ 目录下所有普通文件
find /root/abc/-type f

在这里插入图片描述

按大小查找文件

要根据文件大小查找文件,使用 -size 选项与大小标准一起传递。可以使用以下后缀来指定文件大小:

文件大小标识后缀说明
b512 字节块,默认
c字节
w两字节
k千字节
M兆字节
G千兆字节

我们可以查找文件大小恰好等于、小于或大于指定大小的文件,其命令格式如下:

# 语法
find 指定起始目录 -size [+-] 大小 [文件大小标识后缀]
# 示例
# 在 /root/ 目录下查找文件大小等于 10 字节的文件
find /root/-size 10c
# 在 /root/ 目录下查找文件大小小于 1MB 的文件,其中减号表示小于
find /root/-size -1M
# 在 /root/ 目录下查找文件大小大于 1MB 的文件,其中加号表示大于
find /root/-size +1M
# 在 /root 目录下查找文件大小在 1MB 和 21MB 之间的文件
find /root -size +1M -size -21M

在这里插入图片描述

  • +20 表示 20 之后,如 21、22、23 等
  • -20 表示 20 之前,如 19、18、17 等
  • 20 表示恰好是 20

按时间查找文件

我们可以通过文件的修改时间和访问时间来查找文件,跟文件时间有关的选项有:

选项说明
-amin N查找 N 分钟前被访问过的所有文件
-atime N查找 N 天前被访问过的所有文件
-cmin N查找 N 分钟前文件状态被修改过的所有文件
-ctime N查找 N 天前文件状态被修改过的所有文件
-mmin N查找 N 分钟前文件内容被修改过的所有文件
-mtime N查找 N 天前文件内容被修改过的所有文件

示例如下:

# 查找 /root/ 目录下 3 天前文件内容被修改过的文件
find /root/-mtime 3

在这里插入图片描述

按权限查找文件

如果想要根据权限来查找文件,那么得使用 -perm 选项:

# 语法
find 指定起始目录 -perm 表示权限的数字
# 示例,查找 /root/ 目录下所有具有可读可写可执行权限的文件
find /root/-perm 777

在这里插入图片描述

按所有者查找文件

如果我们要查找指定所有者或所属组的文件,那么可以使用以下选项:

选项说明
-gid N查找组 id 是 N 的所有文件
-uid N查找用户 id 是 N 的所有文件
-group 组名查找属于指定用户组的所有文件
-user 用户名查找属于指定用户的所有文件

示例如下:

# 查找 /root/ 目录下所有属于用户 zs 的文件
find /root/-user zs

在这里插入图片描述

逻辑运算符组成的复合条件

该命令还支持用逻辑运算符 notandor 组成的复合条件。各逻辑运算符说明如下:

逻辑运算符说明举例例子说明
and逻辑与,在命令中用选项 -a 表示,是默认选项,表示当所有条件都满足时,查找条件才匹配find /root/-name test.txt -user 'zs'查找 /root/ 目录下文件名为 test.txt 并且是 zs 创建的文件
or逻辑或,在命令中用选项 -o 表示,表示当只要有一个条件被满足时,查找条件就匹配find /root/-name test.txt -o -user 'zs'查找 /root/ 目录文件名为 test.txt 或者是由 zs 创建的文件
not逻辑非,在命令用 ! 表示,表示查找不满足给定条件的文件find /root/! -name test.txt查找 /root 目录下所有文件名不是 test.txt 的文件

在这里插入图片描述

注:当由多个逻辑选项时,可以用括号把这些逻辑选项括起来。但为了避免 Shell 本身对括号引起误解,在括号前需要加 [转义字符](https://so.csdn.net/so/search?q = 转义字符 & spm=1001.2101.3001.7020)\ 来去除括号的意义。例:find /root/ \(-name test.txt -user 'zs' \)

对找到的文件执行操作

我们可以对找到的文件直接执行操作,那么支持的选项有:

选项说明
-exec 命令名称 {} \;对符合条件的文件执行所给的 Linux 命令,而不询问用户是否需要执行该命令。{} 表示命令的参数即为所找到的文件;命令的末尾必须以 \; 结束。
ok 命令名称 {} \;对符合条件的文件执行所给的 Linux 命令,与 exec 不同的是,它会询问用户是否需要执行该命令。

示例如下:

# 在 /root/ 目录下查找文件名为 test.txt 文件,找到之后统计该文件的行数
find /root/-name test.txt -exec wc -l {} \;

在这里插入图片描述

查找隐藏文件

在 Linux 系统中凡是文件名或目录名是以 . 开头的都是隐藏文件。通过 ls 命令是看不到的,必须通过 ls -a 才能看到这些隐藏的文件。

在这里插入图片描述

如果只是通过 find 命令是会找出所有文件的,包括隐藏文件和非隐藏文件。但有时候如果我们想要只查找隐藏或只查找非隐藏文件,就必须结合 grep 命令一起使用才能达到想要的效果。因为隐藏文件是 . 开头的,所以根据这个特性,用正则表达式去匹配,但是在正则表达式中 . 是有特殊含义的,所以要进行转义 \.。命令格式如下:

# 只查找指定目录下的所有隐藏文件
# `\.` 表示匹配普通的点字符 `.`;而 `\` 又是特殊字符需要进行转义就是 `\\.`;而由于 find 命令查询的结果是文件路径,所以隐藏文件的点字符的前一个字符是 `/`
find 指定目录 -type f | grep "/\\."
# 示例,查找 /home 目录下的所有隐藏文件
find /home -type f | grep "/\\."

在这里插入图片描述

# 只查找指定目录下的所有非隐藏文件
# `\.` 表示匹配普通的点字符 `.`;而 `\` 又是特殊字符需要进行转义就是 `\\.`;而由于 find 命令查询的结果是文件路径,所以隐藏文件的点字符的前一个字符是 `/`
# -v 选项表示除匹配项之外的所有项
find 指定目录 -type f | grep -v "/\\."
# 示例,查找 /home 目录下的所有隐藏文件
find /home -type f | grep -v "/\\."

在这里插入图片描述

Linux 下查找文件(find、grep 命令)

GG_Bond21 修改于 2023-07-14 22:28:53

一、find 命令

1. 按文件名

find 路径 -name "文件名"

:查找 /home 目录下的所有以 .c 为后缀的文件

find /home -name "*.c"

img

2. 按文件类型查询

find 路径 -type 类型

类型:普通文件 f 目录 d 符号链接 l 块设备文件 b
字符设备文件 c socket 文件 s 管道文件 p
:查找 /root/study/c++ 路径下的所有目录
img

3. 按照文件大小查找

通项find 路径 -size 范围
范围+ 表示大于 - 表示小于 等于不需要符号
大小M(必须大写) k(必须小写) c(表示字符)
:查找该目录下 0k 到 10k 的文件
img

4. 按照文件日期查找

4.1 按照创建日期查找

find 路径 -ctime -n/+n

4.2 按照修改日期查找

find 路径 -mtime -n/+n

4.3 按照访问日期查找

find 路径 -atime -n/+n

-nn 天以内**+n**:n 天以外

5. 按深度查找

5.1 查找起始点以下 n 层的目录,不超过 n

find 路径 -maxdepth n (层数)

img

5.2 搜距离起始点 n 层以下的目录(即最少 n 层)

find 路径 -mindepth n (层数)

img

6. 高级查找

6.1 -exec

find 路径 查找方式 -exec shell 命令 {} \;

img

6.2 -ok

该方法与 6.1 相比更加安全,其存在确认过程

find 路径 查找方式 -ok shell 命令 {} \;

img

6.3 管道方式

有较多文件时优先使用

find 路径 查找方式 | xargs shell 命令

img

二、grep 命令

即按照内容查找

grep 参数 "内容" 查找目录或文件

参数

  • -r 若是目录,则可以递归查找
  • -n 可以显示该查找内容所在的行号
  • -i 可以忽略大小写进行查找
  • -v 不显示含有某字符串
    img

三、grep 和 find 命令结合使用

先使用 find 命令查找文件,然后使用 grep 命令查找哪些文件包含某个字符串

find . -name "*.cpp" | xargs grep -n "main"

img


via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值