', 'auto'); ga('send', 'pageview'); 明明白白的赛特 – find命令初级用法

find命令初级用法

在 2024-02-01 发布于 工具 分类

find 是一个在 Unix 和 Linux 系统上常用的命令行工具,用于在文件系统中搜索文件和目录。它可以按照文件名、文件类型、文件大小、修改时间等各种条件进行搜索。以下是 find 命令的一些基本用法和示例:

基本语法

find [起始路径] [表达式]

查找文件和目录

列出目录和文件

如果find后面只跟“起始路径”,不跟“表达式”,则列出起始路径下的所有文件和目录:

# 列出/root目录下的子目录和文件
find /root

# 列出当前目录下的子目录和文件(等价于find .)
find

列出/root下的隐藏目录和文件

find /root -name '.*'

上面-name表示按照文件名过滤。'.*'表示以.开头后面跟任意字符的字符串。合到一起就表示要过滤出以.开头的文件或目录名字

列出/root下的所有子目录

find /root -type d

-type d表示过滤目录类型

按大小搜索

搜索大于10M的文件

find /root -size +10M

-size +10M表示文件大小大于10M。如果写成-size -10M则表示文件大小小于10M。如果写成-size 10M则表示文件大小精确等于10M。

按时间搜索

搜索过滤7天内修改过的文件

find /root -mtime -7

-mtime表示按照文件修改时间过滤,单位是天数。-7表示小于7天,也就是7天内。如果写成+7表示大于7天。

还有个-mmin也表示按照修改时间过滤,但单位是分钟。因此-mmin -10表示10分钟内修改过的。

另外还有-ctime/-cmin-atime/-amin,分别表示创建时间和最近访问时间,语法类似不在赘述。

条件组合

列出/root下的隐藏目录和文件,但不能是zip文件

find /root -name '.*' ! -name '*.zip'

这里列出了两个过滤条件: - -name '.*'前面解释过了 - !表示否定条件。! -name '*.zip'表示不能是.zip结尾的文件

但是如果有个目录叫做foo.zip,这个目录也会被上面的条件排除掉。因此我们再修改下过滤条件:

find /root -name '.*' ! \( -type f -name '*.zip' \)

这里否定的条件变成了两个,两个条件都要满足才会被排除: 1. -type f 文件类型。 2. -name '*.zip' 名字以".zip"结尾

执行操作

当使用 find 命令找到一组文件和目录后,可以指定在文件或目录上执行某个命令时。-exec 选项允许你对匹配的文件执行任意的 shell 命令。下面是一些示例

打印文件名

如果你想找到所有 .txt 文件并打印它们的文件名,可以使用以下命令:

find /path/to/search -name "*.txt" -exec echo {} \;

在这里,{} 是一个占位符,表示找到的每个文件的路径。\; 表示 -exec 选项的结束。这条命令会找到所有以 .txt 结尾的文件,并使用 echo 命令打印每个文件的路径。

删除文件

如果你想删除所有 .tmp 文件,可以使用以下命令:

find /path/to/search -name "*.tmp" -exec rm {} \;

这条命令会找到所有以 .tmp 结尾的文件,并使用 rm 命令删除它们。请注意,这是一个破坏性操作,请谨慎使用。

为了防止误删文件,可以使用 -ok 选项代替 -exec。它会先询问你是否确定要执行删除操作:

find /path/to/search -name "*.tmp" -ok rm {} \;

在执行每个删除操作之前,系统会询问你是否确定要继续。这提供了一种更安全的方式来执行破坏性操作。