我想计算目录树的文件大小,但我想忽略所有 PDF 和图像。本质上,我想弄清楚纯文本文件的大小。
我怎样才能做到这一点?
注意:这是在 Linux 环境中,特别是 RedHat
答案1
考虑如下目录结构:
$ ls -sR1
.:
total 32
4 1/
4 2/
4 m
4 n
4 o
4 x.pdf
4 y.pdf
4 z.pdf
./1:
total 0
./2:
total 8
4 a/
4 p
./2/a:
total 4
4 q
然后,为了获取所有不匹配的文件的列表*.pdf
,我们可以这样做
$ find . -type f \( ! -name '*.pdf' \)
其扩展也不匹配,这*.jpg
是相当明显的。然后使用 du
如下:
$ du -c $(find . -type f \( ! -name '*.pdf' \))
4 ./o
4 ./m
4 ./n
4 ./2/a/q
4 ./2/p
20 total
您可能需要在其中添加一个-b
来获取以字节为单位的视在大小,而不是磁盘使用量。-c
给出总计。
这种方法的局限性是:
- 如果你的目录树非常大,它将无法工作,因为
- 因为它扫描树两次(
find
+du
) - 因为它通过命令行将输出输入
find
到其中,因此受到其允许的最大大小的限制。du
- 因为它扫描树两次(
- 它(以这种简单的方法)只会根据文件名称而不是文件内容来匹配文件。
您可以通过对每个单独的文件find
执行du
,然后使用awk
或类似的东西将它们全部加起来来解决 1.。 2. 可能会通过更有趣的检查来解决find
,可能基于每个文件的输出file
并将其与正面或负面列表进行匹配。