在 Linux 上计算目录中文件数量的 5 种方法
厌倦了手动计数文件?自动对它们进行计数,包括隐藏的。
要点
- Linux 上的“ls”命令列出文件和目录。通过管道将其连接到“wc -l”会计算文件和目录的总数,包括隐藏的文件和目录。
- “tree”命令递归地显示整个目录结构,并在最后总结文件计数。添加“-a”选项也会显示隐藏文件。
- 带有 -type、-mindepth 和 -maxdepth 等选项的“find”命令可以递归地对文件和目录进行计数。使用“-type f”仅计算文件,使用“-type d”仅计算目录。
使用 Linux 等操作系统时,管理文件是基本任务之一。如果您是 Linux 管理员,想象一下您必须处理的文件数量。如果您的文件占用大量磁盘空间,那么这将是一个棘手的问题。让我们讨论一些计算这些文件的方法,包括讨厌的隐藏文件。
为什么我们需要在 Linux 上统计文件数量?
如果您是 Linux 管理员或刚刚开始使用 Linux 命令,您最终将需要对 Linux 目录中的文件进行计数。您可能需要释放系统上的空间、计划备份系统文件并估计要备份的数据量,或者只是想让文件井井有条。这是每个 Linux 用户都需要知道如何完成的任务。
假设在工作时,您的系统耗尽了索引节点。突然,您面临可怕的“设备上没有空间”错误,并且无法创建任何新文件或目录。这时就该卷起袖子,通过计数来管理消耗磁盘的文件和目录了。幸运的是,有一些 Linux 命令可以完成这个任务。
使用 wc 命令计算文件和目录(包括隐藏文件)
在 Linux 上,ls
命令可以列出所有文件和目录。当使用 wc
命令通过管道传输 (|) 时,此命令会产生文件和目录(包括隐藏文件和目录)的总数。
在开始计算文件数之前,让我们使用 ls 命令列出 ~/HTG 目录中的实际文件。这里我们总共有十个文件,包括〜/HTG主目录中的四个子目录。有 1 个隐藏文件、1 个文本文件和 4 个测试文件。
要列出文件,建议使用 ls-A
代替 ls -a
。这 ls
命令与 -a
选项包括特殊条目 - (.) 当前目录和 (..) 父目录。这会导致文件数量总体增加。
要计算文件和目录的数量,首先导航到该目录并执行以下命令:
ls | wc -l
首先,ls 命令列出了 ~/HTG 目录中的所有文件和目录,不带任何格式选项。 ls 的输出由文件和目录名称的简单列表组成,每个名称位于单独的行上。
为了对 ls 命令列出的文件进行计数,我们将其输出通过管道 (|) 传送到 wc -l 命令。 wc 命令对这些列出的文件进行计数并输出文件计数。请记住此命令输出 9,因为它不包含 ~/HTG 目录中存在的一个隐藏文件。
我们有不同的选项可以与 ls 命令一起使用。例如,ls -l
使用长列表格式(-l)
列出当前目录中的文件和目录。它提供有关每个文件的详细信息,包括权限、所有者、大小和修改日期。
ls -l | wc -l
此命令不包括隐藏文件,但它包括长列表格式的目录本身条目(由 . 表示),在本例中为 ~/HTG 目录。结果,它使总数增加了 1。
如果无论列表格式如何,您都希望获得一致的计数,则可以在计数时使用 -A 选项和 ls 来排除特殊条目 (.) 当前目录和 (..) 父目录:
ls -A | wc -l
这应该提供与 ls -l 命令相同的计数。输出为 10,因为该命令还包含一个隐藏文件。
如果您想要一个在总计数中包含隐藏文件、父目录 (..) 和当前目录 (.) 的命令,请使用 ls -a
选项和 wc
命令。
ls -a | wc -l
相关:如何在 Linux 中使用 wc 命令
使用 tree 命令计算文件和目录的数量
要统计所有子目录中的文件和目录的数量,可以使用tree
命令。 tree 命令递归地打印整个目录结构,并在输出末尾显示摘要。
<directory> tree
您可能会发现树命令丢失错误,要解决它,请使用以下命令安装树命令:
对于 Ubuntu/Debian 主机: sudo apt install tree 对于 CentOS/RHEL 主机: sudo yum install tree
默认情况下,tree 命令不打印隐藏文件。要显示隐藏文件,请使用 -a
选项和 tree 命令:
tree -a
现在所有文件都被列出并计数,包括隐藏的文件。
相关:如何在 Linux 上遍历目录树
使用 find 命令递归计算文件数
Linux 上的 find 命令具有各种选项,例如 -type
、-mindepth
和 -maxdepth
,可以帮助轻松执行递归计数。它确定目录结构中项目的总数,而无需手动导航到每个子目录并逐一计数。
find <directory> <options> | wc -l
find 命令使搜索递归,因为默认情况下它会遍历每个子目录。它不会在第一深度停止搜索。
要计算目录中的所有条目(文件和文件夹),请使用:
find HTG | wc -l
此命令还对当前目录进行计数,在本例中为 ~/HTG — 总体上将搜索结果加一。
没有任何特定条件的 find 命令默认在其搜索中包括常规文件和隐藏文件。
要仅对文件进行计数,请使用:
find HTG -type f | wc -l
要仅计算包括当前目录在内的目录(在本例中为 ~/HTG),请使用:
find HTG -type d | wc -l
find 命令还可以搜索与特定模式匹配的文件(“.txt”、“.pdf”、“.sh”):
find . -type f -name "*.txt" | wc -l
此命令输出当前目录中以“.txt”扩展名结尾的文件数。
当您计算文件夹及其子文件夹中的文件数时,有时您将无法查看所有子文件夹,因此您的系统可能会显示“权限被拒绝”之类的错误。
您可以使用称为“输出重定向”的技术来重定向这些错误消息。
find /etc -type f 2> /dev/null | wc -l
我们还可以使用“minDepth”和“MaxDepth”选项修改搜索结果。
find HTG -mindepth 1 -maxdepth 1 | wc -l
在本例中,-mindepth 1
表示搜索从最小深度 1 开始,跳过根目录本身并在其直接子目录中开始搜索。
-maxdepth 1
选项以最大深度 1 进行搜索。它不会探索直接子目录的子目录。
相关:如何在 Linux 中使用 find 命令
使用 Bash 脚本对 Linux 目录中的文件进行计数
在 Linux 上,Bash 脚本可以自动执行重复任务。这里的情况也是如此,我们可以编写一个 bash 脚本并定义一个目录来统计其中存在的文件。
给定的 bash 脚本使用通过 wc 管道传输的 find 命令来计算 ~/HTG 目录中的所有文件。该脚本执行时输出 11,因为它还对当前目录进行计数,将结果加一。
#!/bin/bash
dir="HTG"
count=$(find "$dir"; | wc -l)
echo "There are $count files in the $dir directory."
如 find 命令中所述,要从最终计数中排除特殊目录,请向 find 命令添加 -mindepth 1
选项。
使用 GUI 计算文件数量
在 Linux 上使用 KDE 或 GNOME 等桌面界面计算文件数量非常简单!这就像在 Windows 上计算文件数一样。
通过转到活动菜单或使用“主”目录打开要检查的目录或文件夹。
右键单击该文件夹并选择“属性”选项。
弹出一个新窗口,显示文件夹中的项目总数。
请记住,此方法仅显示所有项目(例如“文本文件”、“.sh 文件”和“目录”)的总数,而不计算单个文件。至少,Ubuntu 的默认文件浏览器 Nautilus 没有,但其他浏览器(例如 Dolphin Browser)确实会向您显示更多数据。
检查文件计数所需的权限
执行所有这些命令时,请确保您拥有工作文件夹所需的权限。如果遇到权限错误,请在命令前键入“sudo”。另外,请检查命令的语法,以防遇到任何错误。要充分利用这些命令,请使用“man”命令参阅各自的帮助指南。