找回密码
 立即注册
搜索
查看: 172|回复: 0

find命令用法

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2023-3-9 14:44:02 | 显示全部楼层 |阅读模式
如何按名称搜索文件
假设您在某处保存了一个名为 hello_world.html 的文件,但您不记得目录名称了。但是您的老板要求您立即将文件发送给他。
通常,如果您忘记了文件的存储位置,您首先会逐个浏览文件夹并检查文件是否存在。
这时就是 find 命令发挥作用的时候。您可以使用 find 命令自动执行该过程,而不是在您的计算机上手动搜索文件。
通过使用 -name 标志传递文件名,find 命令搜索并返回文件的位置。
find -name <file_name>
7 X9 c, ^/ e/ W
find 命令语法以按名称搜索文件
9 z% u0 v% n: K
按名称搜索文件的终端命令
但请记住 -name 标志执行区分大小写的搜索。如果您希望不区分大小写,则可以改用 -iname 标志。
find -iname <file_name>
7 N' t, q$ Z" F$ J0 F
/ ]. t  R% @/ d* K0 o9 u
不区分大小写搜索的命令
在某些地方,您还可以使用 find 命令替代 ls 命令。假设您需要查找所有以 .txt 扩展名
结尾的文件。您可以通过使用正则表达式
模式 (*.txt) 的 find 命令来执行此操作。
find /path/to/search -name "*.txt"# Q* C: Z6 o* y" p; m3 Q: b

" r& R' X2 s% [, D. d% }" j' v
命令搜索模式匹配的文件
此命令将列出当前目录
及其子目录中的所有 .txt 后缀的文件。
要在特定目录和子目录中查找 .txt 文件,您可以将 /path/to/search 替换为您的目录路径。
如何在 Linux 中查找目录
通过将 d 传递给 find 命令中的 -type 参数,可以搜索目录。
find /path/to/search -type d
7 V- s, Q( A. |0 S2 b5 P4 D6 n
5 `0 D4 D; U2 y# ?6 ~2 R6 W& Y
查找目录的命令
在上面的屏幕截图中,我们从当前目录中找到一个名为 zip 的目录。
同样,-type 选项接受其他参数选项以简化我们的查找过程。
  • • b - 块设备文件。
  • • d - 目录。
  • • c - 字符设备, }! C* i- S: P7 t3 y) i8 c, a: ^
文件。• p - 管道文件。• l - 符号链接文件。• f - 普通文件。• s - socket文件如何在 Linux 中按大小搜索文件
将 -size 选项与 find 命令一起添加可帮助您根据大小查找文件。在大小前加上 + 或 - 分别表示大于和小于。
find /path/to/search -size <size_of_the_file>  \2 K5 h0 |' t; T) l9 A( O$ h
* d3 l. m' y+ f4 L. g' I
按大小搜索文件
在上面的屏幕截图中,我们找到了所有大小大于 1 GB 的文件。
您还可以搜索特定大小范围内的所有文件。
例如,如果要查找所有大于 50 MB 且小于 100 MB 的文件,可以运行以下命令:
find /path/to/search -size +50M -size -100M! y4 n! A6 m: \5 Q( b% B( @5 e

* n) M4 b- y" [
搜索一定范围内的文件
您可以用您喜欢的符号指定大小。一些可用的符号是:
  • • b: 代表 512 位元组
    7 c' o. e( `; s
的区块(如果用户没有指定后缀,则默认为 b)• c: 表示字节数• k: 表示 kilo bytes (1024字节)• w: 字 (2字节)• M:兆字节(1048576字节)• G: 千兆字节
  • (1073741824字节): {$ h+ o* }' p" t; n
如何根据修改时间搜索文件
每个文件都有与之关联的创建时间和上次更新时间。假设您的目录中有数千个文件。您在过去几天编辑了一个文件,但忘记了它的名字。您确定在那之后您只编辑了很少的个文件。
在这种情况下,您可以找到过去 7 天内修改过的所有文件。这会将您的搜索从 1000 多个文件限制到更易于管理的数量。运行该命令后,您将能够在几秒钟内找到您编辑的文件。
这可以通过使用 find 命令传递 -mtime
参数来实现。
find /path/to/search -mtime <-number_of_days_ago>
, G8 C  b- y3 K& A( q5 u% V4 A. W: p8 ^4 H' y, z- P
搜索在特定日期内修改的文件
假设另外一个场景,今天是2023年2月10日,你在2023年2月3日之前修改了一个文件,2023年2月3日之后修改了很多文件。您必须找到您在 2023 年 2 月 3 日之前修改的文件。
您也可以使用 find 命令运行此查询。您可以通过将负号 (-) 与正号 (+) 交换来实现此目的。
这是为您修改的命令:
# 搜索在特定日期之前修改的文件find /path/to/search -mtime +7& E6 E; l9 N6 |9 i$ N% }) X) D9 _
如何对从 find 命令过滤的文件执行命令
这个问题可能会让你感到困惑。在揭晓答案之前,我们先用一个真实的场景来理解这个问题。
假设您在一个目录中有 1000 个文件,运行 find 命令会返回 20 个匹配的文件。您想要将这 20 个文件移动到不同的目录中。你怎么能做到这一点?
简而言之,我们必须对每个过滤后的文件运行一个命令。
您可以通过将 -exec 选项与 find 命令一起传递来执行此操作。
-exec 选项对在搜索中找到的每个文件执行命令。 -exec 选项后跟命令及其参数,{} 符号表示被处理的文件的路径。
为了表示 -exec 命令的结束,我们必须添加 \; (一个反斜杠和一个分号)。
语法如下:
find /path/to/search -name  -exec  {}  \;
  f2 V1 R) ^6 W7 b- ]& `0 a* V
让我们尝试将过滤后的文件从 5minslearn 目录移动到 zip 目录。
这是命令:
find ./5minslearn -name "*.zip" -exec mv {} ./5minslearn/zip \;
" q6 y" n! p# i7 q0 I  C
, a& t% B3 a6 y( W' f
此命令在 ./5minslearn 目录中搜索所有以 .zip 结尾的文件,然后将每个文件移动到 ./5minslearn/zip 目录。
-exec 选项允许您对找到的文件执行范围广泛的操作。您可以通过复制、删除甚至更改文件权限命令
来替换上述示例中的移动命令。
对过滤的文件执行命令之前进行确认
如果不确定是否对每个文件应用该操作,大多数人会更愿意使用-ok。
-ok 选项类似于 -exec 选项,只是它会在对每个文件执行操作之前要求确认。此命令对于在执行特定操作之前查看将受影响的文件非常有帮助。如果您不确定或不想应用该命令,您也可以选择拒绝。
例如,这次让我们尝试将 .txt 文件移动到其他目录。
find /path/to/search -name "*.txt" -ok mv {} /path/to/destination \;
% w' y6 Q8 a! ?. t8 Q# C! E
0 }1 m( ]8 Y2 _) ~  A( u( F
对筛选的文件运行操作之前要确认
上述命令在 ./5minslearn 目录中搜索所有扩展名为 .txt 的文件,然后在将每个文件移动到 ./5minslearn/text_files 目录之前提示用户确认。
要批准操作,输入 "yes","no "则拒绝操作并跳到下一个文件。
当您想对正在修改的文件保持谨慎时,-ok 选项很有用,因为它允许您在执行指定命令
之前检查每个文件及其位置。
显示查找文件的详细信息
find 命令中的 -ls 选项用于以 ls 命令的格式显示有关搜索到的文件的信息。此选项提供有关文件的详细信息,例如它们的权限、所有者、大小和上次修改时间。
find /path/to/search -name "*.<file-extension>" -ls
; i, J& z4 m. m2 q* n
4 t$ r8 Z5 U  \4 `" C4 n
以 ls 命令格式列出文件
查找并删除文件
您是否曾经需要查找文件并将其从计算机中删除? find 命令中的 -delete 选项会为您执行此操作。它允许您删除符合指定条件的文件。
find . -name "*.<extension>" -delete! Y* b' K, r, a

% c* Z* F9 I' }' Z* s) [+ f
在上面的示例中,您可以看到 find 命令删除了扩展名为 .html 的文件
注意:此操作不可逆。运行删除操作时要 100% 确定。
我建议首先运行不带 -delete 标志的 find 命令,并确保只显示需要删除的文件。确定后,您可以执行附加 -delete 标志的相同命令。

  M% a& Z7 y- k9 m9 r0 J  d& J
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-21 11:55 PM , Processed in 0.071287 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表