我认为这很容易,互联网上有很多比较接近的话题,但没有什么是对的。
我想使用fd
(简单的查找命令)仅显示搜索结果的文件名和文件大小(最好以 mb 为单位,或者格式比字节更易读)。
我最接近的是使用:
fd '2023' -x stat --format='%n : $s'
这似乎适用于文件,但不适用于目录。
例如
fd --type d '2023' -x stat
我试过吹笛子 | 和tee
和xargs
。但是作为新手,我没有任何运气。
关于如何显示文件和文件夹的输出以及如何将字节格式化为适当的单位有什么想法吗?
谢谢
而不是目录文件的大小¹,看起来您想要这些目录的累积大小或者磁盘使用情况以及可以通过它们的遍历找到的所有文件。
那么你可能想要:
(这里使用
fdfind
在 Debian 和衍生产品上找到的该命令的名称,因为有一个预先存在的fd
命令用于完全不相关的东西;fd
如果这就是它在您的系统上的调用方式,请替换为)。那是给
d
圣人u
的;改为为大小添加一个--apparent-size
选项。du
请记住,
du
如果在多个目录中找到文件(通过其任何硬链接或通过相同路径),它会执行一些重复数据删除并仅计算一次文件的磁盘使用情况。例如,如果有一个2023/2023
目录,您将看到0
该子目录的磁盘使用情况,因为它和其中的所有文件都已在上层目录的报告中说明2023
。您可以使用禁用该重复数据删除
--count-links
。您可能还想传递一个
--prune
选项fdfind
以停止在匹配的目录中查找更多文件。请注意,
--
您需要将选项与文件分开(没有它,您会遇到名为-2023
, 或--files0-from=2023/etc/shadow
例如的文件的问题(导致潜在的信息泄露漏洞)。这同样适用于stat
或大多数命令。并注意
-X
instead of-x
fordu
传递尽可能多的文件路径,而不是在每个文件的新进程中运行一次。请注意,du
如果有大量匹配文件,最终可能会被多次调用,这可能会使上述重复数据删除变得不可靠。将文件列表传递给的更好方法du
是使用--files0-from
选项通过其标准输入。然后您甚至可以添加选项以在末尾-c
获得c
总计行:-h
(--human-readable
)、,--count-links
和--files0-from
都是--apparent-size
. 的 GNU 实现的非标准扩展du
。-h
如今在其他实现中很常见,而其他实现(包括--human-readable
长形式的-h
)则很少见。¹例如,将目录视为电话目录。在许多文件系统上,这有点像 CSV 文件,其中一列包含文件名列表,另一列包含在磁盘上的位置(inode 编号)(有时第三列表示文件类型) . 和任何文件一样,目录/csv 文件有自己的大小和磁盘使用情况,这就是一个
gstat -c %s
或gfind -printf %s
或ls -l
报告。