Linux查找最大的目录或者文件

Linux如何显示目录中最大的文件:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1

Linux中查找目录中前 5 个最大的文件,你可以调整 tail 命令:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5

或者,我们可以使用 head 命令来确定最小的文件:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5

Linux查找最大的目录:

$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1

过滤掉Permission denied信息

使用 find 命令搜索文件时,我们必须对要搜索的目录和子目录具有读取权限。
否则find 命令将产生大量错误消息 Permission denied。

为避免看到这些错误,我们可以使用grep过滤掉

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

find 命令的 CPU 负载

在搜索大量目录时,find 命令可能会占用大量资源。
它本质上应该允许更重要的系统进程具有优先级,但是如果我们需要确保 find 命令在生产服务器上占用更少的资源,则可以使用 ionice 或者 nice 命令。

监控 find 命令的 CPU 使用率:

$ top

降低 find 命令的输入/输出优先级:

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

降低 find 命令的 CPU 优先级:

$ nice -n 19 find /path/to/search -name "myfile.txt"

或者结合这两个实用程序来真正确保低 I/O 和低 CPU 优先级:

$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"
Linux find 命令示例

查找最近 X 天内修改过的文件

在 find 命令中使用 -mtime 选项可搜索在过去 X 天内修改过的文件或者目录。
它还可用于搜索早于 X 天的文件,或者刚好在 X 天前修改过的文件。

Linux 搜索过去 30 天内修改过的所有文件:

$ find /path/to/search -type f -mtime -30

搜索 30 天前修改过的所有文件:

$ find /path/to/search -type f -mtime +30

搜索 30 天前刚修改过的所有文件:

$ find /path/to/search -type f -mtime 30

不在列表中查找

$ find /path/to/search | grep -vf filelist.txt

grep 上的 -v 选项意味着“反向匹配”,它将返回与我们的文件列表中指定的任何模式都不匹配的文件列表。

从文件列表中查找

如果我们有一个需要搜索的文件列表(例如在 .txt 文件中),我们可以使用 find 和 grep 命令的组合来搜索文件列表。

$ find /path/to/search | grep -f filelist.txt

grep 上的 -f 选项表示“文件”,允许我们指定要匹配的字符串文件。
这导致 find 命令返回与列表中的名称匹配的任何文件或者目录名称。

查找 sgid 设置文件

查找设置了 SGID 的文件和查找带有 SUID 的文件几乎相同,只是需要将 4000 的权限更改为 2000:

$ find /path/to/search -perm /2000

我们还可以通过在 perms 选项中指定 6000 来搜索同时设置了 SUID 和 SGID 的文件:

$ find /path/to/search -perm /6000

查找隐藏文件

由于 Linux 中的隐藏文件和目录以点号(.)开头,我们可以在搜索字符串中指定此搜索模式,以便递归列出隐藏文件和目录。

$ find /path/to/search -name ".*"

查找 setuid 设置文件

Setuid 是“set user ID on execution”的缩写,它是一种文件权限,允许普通用户以升级的权限(如root)运行程序。

find 命令有两个选项可以帮助我们搜索具有特定权限的文件:-user 和 -perm。
查找普通用户能够以 root 权限执行的文件:

$ find /path/to/search -user root -perm /4000

包含了 -exec 选项,显示有关 find 返回的文件的更多输出。

$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;

我们可以搜索所有具有 SUID 权限的文件:

$ find /path/to/search -perm /4000

按时间排序

要按文件的修改时间对 find 的结果进行排序,我们可以使用 -printf 选项以可排序的方式列出时间,并将该输出通过管道传输到排序实用程序。

Linux 按旧到新排序文件

$ find /path/to/search -printf "%T+\t%p\n" | sort

Linux 按新到旧排序文件

$ find /path/to/search -printf "%T+\t%p\n" | sort -r

Linux查找特定大小或者大于 X 的文件

Linux 搜索大小超过 10MB 的文件:

$ find /path/to/search -size +10M

搜索小于 10MB 的文件:

$ find /path/to/search -size -10M

搜索大小正好为 10MB 的文件:

$ find /path/to/search -size 10M

搜索大小在 100MB 到 1GB 之间的文件:

$ find /path/to/search -size +100M -size -1G

设置最大深度

默认情况下,find 命令将递归搜索。
这意味着它将搜索我们指定的模式的指定目录,以及我们告诉它搜索的目录中的任何和所有子目录。

例如,如果我们告诉 find 搜索 Linux 的根目录(/),它将搜索整个硬盘驱动器,无论子目录中存在多少个子目录。

在 -maxdepth 之后指定一个数字来指示 find 应该递归搜索多少个子目录。

只搜索当前目录中的文件,不要递归搜索:

$ find . -maxdepth 0 -name "myfile.txt"

仅在当前目录和更深一层子目录中搜索文件:

$ find . -maxdepth 1 -name "myfile.txt"

Linux查找空文件(零长度)

要使用 find 搜索空文件,我们可以使用 -empty 标志。

搜索所有空文件:

$ find /path/to/search -type f -empty

搜索所有空目录:

$ find /path/to/search -type d -empty

删除目录(和子目录)中的所有空文件:

$ find /path/to/search -type f -empty -delete

查找目录

我们可以使用 -type d 选项告诉 find 命令专门查找目录。
这将使 find 命令只搜索匹配的目录名而不是文件名。

$ find /path/to/search -type d -name "name-of-dir"
日期:2020-07-15 11:16:43 来源:oir作者:oir