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