find
是 Linux 系统中的一个非常强大的命令行工具,用于在指定的目录树中搜索文件和目录。它提供了丰富的选项和参数,可以让用户按照各种条件来搜索文件,如文件名、大小、权限等。

基本语法
find
命令的基本语法如下:
find [搜索路径] [选项] [匹配条件]
-
[搜索路径]
:指定要搜索的目录路径,如果不指定,则默认为当前目录及其子目录。 -
[选项]
:用于指定搜索的行为。后面我们会详细介绍一些常用的选项。 -
[匹配条件]
:用于指定搜索的文件名模式或其他匹配条件。
目录搜索相关例子
按照完整目录名称搜索
find /path/to/search -type d -name "directory_name"
这将在 /path/to/search
目录下搜索名称为 directory_name
的目录。
按照部分目录名称搜索
find /path/to/search -type d -name "*partial_name*"
这将在 /path/to/search
目录下搜索包含 partial_name
的目录。
按照大小写不敏感搜索
find /path/to/search -type d -iname "directory_name"
使用 -iname
选项,可以忽略目录名称的大小写进行搜索。
排除特定目录
find /path/to/search -type d -name "directory_name" -not -path "/path/to/exclude"
这将在搜索中排除 /path/to/exclude
目录。
按照目录名称长度搜索
find /path/to/search -type d -name "directory_name" -maxdepth 2
这将在深度为2的范围内搜索目录名称为 directory_name
的目录。
查找最近修改的目录
可以使用 -type d
选项来限制 find
命令只搜索目录,并结合 -printf
选项打印出目录的最后修改时间,然后使用 sort
命令按照时间排序。
find /path/to/search -type d -printf '%T+ %pn' | sort -n | tail -1
这将在 /path/to/search
目录及其子目录中查找,并打印出最近修改的目录路径和修改时间。
查找最近 N 天内修改的目录
可以使用 -mtime
选项来指定时间范围。以下是一个示例:
find /path/to/search -type d -mtime -N
其中,N
是你想要的时间范围,以天为单位。这将在 /path/to/search
目录及其子目录中查找最近 N 天内修改过的目录。
查找旧目录
可以使用 -mtime
选项来指定目录的修改时间。
-
查找旧目录:
使用 -mtime
选项可以找到最近N天内未修改的目录。假设我们想要找到超过30天未修改的目录,可以这样做:
find /path/to/search -type d -mtime +30
这将在 /path/to/search
目录及其子目录中查找最近30天内未修改过的目录。
-
打印目录及其修改时间:
如果你想要打印出目录及其修改时间,你可以使用 -printf
选项:
find /path/to/search -type d -mtime +30 -printf "%T+t%pn"
这将打印出找到的目录的修改时间和路径。
-
排序结果:
你可能希望按照修改时间对结果进行排序,以便更容易看到哪些目录是最旧的。你可以使用 sort
命令来实现:
find /path/to/search -type d -mtime +30 -printf "%T+t%pn" | sort
这将按照修改时间对目录进行排序。
-
反向排序:
如果你想要按照最新的目录显示在前面,可以使用 sort
命令的 -r
选项进行反向排序:
find /path/to/search -type d -mtime +30 -printf "%T+t%pn" | sort -r
这将按照修改时间对目录进行反向排序,即最新的目录会显示在前面。
搜索指定范围内的目录
可以使用 -mindepth
和 -maxdepth
选项。这些选项允许你指定搜索的最小和最大深度,其中深度表示从起始目录到匹配的文件或目录的路径中包含的目录级别数。
-
搜索指定深度范围内的目录:
find /path/to/search -mindepth 1 -maxdepth 3 -type d
这将在 /path/to/search
目录下搜索深度为1到3的目录。-mindepth 1
排除了起始目录本身,因为它的深度为0。
-
在当前目录及其子目录中搜索:
find . -mindepth 1 -maxdepth 3 -type d
这将在当前目录及其子目录中搜索深度为1到3的目录。
-
在当前目录及其子目录中搜索特定深度的目录:
find . -mindepth 2 -maxdepth 2 -type d
这将在当前目录及其子目录中搜索深度为2的目录。
根据权限查找目录
可以使用 find
命令的 -perm
选项。 -perm
选项允许你按照文件权限来查找文件或目录。
-
查找具有特定权限的目录:
find /path/to/search -type d -perm /permissions
在这里,/path/to/search
是你要搜索的目录的路径,而 /permissions
是一个用于指定权限的数字表示。例如,如果你想查找所有用户都有读、写和执行权限的目录,可以使用 700
。
-
查找所有者具有特定权限的目录:
find /path/to/search -type d -perm /owner_permissions
这将查找所有者(文件的拥有者)具有特定权限的目录。
-
查找组具有特定权限的目录:
find /path/to/search -type d -perm /group_permissions
这将查找组(文件的所属组)具有特定权限的目录。
-
查找其他用户具有特定权限的目录:
find /path/to/search -type d -perm /other_permissions
这将查找其他用户(不是所有者或所属组)具有特定权限的目录。
-
结合权限查找:
你也可以结合使用多个权限,比如查找所有者和组都具有特定权限的目录:
find /path/to/search -type d -perm /owner_permissions -perm /group_permissions
这将查找同时满足所有者和组具有特定权限的目录。
查找包含特定数量文件的目录
可以使用 find
命令结合 -exec
和 wc
命令来实现。下面是一个示例:
find /path/to/search -type d -exec bash -c 'echo "$(ls -A "$1" | wc -l) $1"' _ {} ; | awk '$1 == N {print $2}'
在这个命令中:
-
/path/to/search
是你要搜索的目录路径。 -
-type d
用于限制find
命令只搜索目录。 -
-exec
选项允许在找到的每个目录上执行指定的命令。 -
bash -c 'echo "$(ls -A "$1" | wc -l) $1"' _ {}
这部分命令会统计目录中的文件数量,并输出文件数量和目录路径。 -
;
表示-exec
选项的结束符。 -
awk '$1 == N {print $2}'
用于过滤输出,只显示文件数量为N
的目录路径。将N
替换为你想要查找的文件数量。
这种方法可能在包含大量目录的情况下效率不高。如果你需要在大型目录树中查找特定数量文件的目录,可能需要使用更高效的方法,比如编写一个脚本来实现。
搜索空目录
你可以使用 find
命令结合 -empty
选项。以下是一个示例:
find /path/to/search -type d -empty
在这个命令中:
-
/path/to/search
是你要搜索的目录路径。 -
-type d
用于限制find
命令只搜索目录。 -
-empty
选项表示只匹配空目录。
这将列出 /path/to/search
及其子目录中所有为空的目录。
原文始发于微信公众号(运维漫谈):在 Linux 中 `find` 命令针对目录的所有骚操作,一文带你全部搞定了!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/281932.html