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 {} \;
在执行每个删除操作之前,系统会询问你是否确定要继续。这提供了一种更安全的方式来执行破坏性操作。