使用 find 计算 1000 天以上的文件所使用的总磁盘空间

使用 find 计算 1000 天以上的文件所使用的总磁盘空间

我们的系统中有超过 4 年的数据。我们需要将 2 年前的文件和目录移动到新的存储库中。我们的要求是需要知道从 2017 年 1 月到现在有多少 TB 的数据 2.排除个人文件夹 我试图找到命令但无法找到。

find . -type f -mtime +1010 ! -path "./home/01_Personal Folder*" -printf '%s\n' \ 
| awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}'

答案1

可能类似于:

find . ! -path "./home/01_Personal Folder*" -type f -mtime +1000 -exec du -ch {} + | grep total

答案基于:查找目录分支中某些文件的总大小

解释一下外壳命令。

答案2

...
37M     total
29M     total
42M     total
43M     total
36M     total

real    0m1.271s
user    0m0.561s
sys     0m1.278s

我得到的是:

time find ~/sda1 -type f -exec du -ch {} +|grep total

所以现在我需要一个工具来汇总总数! (这是-exec...+溢出)

但与:

time find ~/sda1 -type f -printf "%s\n" | awk '{a+=$1;} END {print a;}'

10483650002

real    0m0.550s
user    0m0.251s
sys     0m0.349s

和:

]# time du ~/sda1 -sh
11G     /.../sda1

real    0m0.458s
user    0m0.116s
sys     0m0.340s

我得到它又好又快。


du当 find 无论如何都在查找每个文件时,它似乎效率很低stat,并且可以免费给出大小。使用find ... -exec du {} +,du被降级为 -c“总计”的计算器。

当然,文件大小(以字节为单位)和磁盘使用情况(以块为单位)之间存在一些差异。


这里只是为了说明原来的 `find ... -printf "%s\n" | awk '{...} END {...}' 的工作原理:

]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {print a;}'
1093990
]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {printf "%x\n",a;}'
10b166

这是我第一次awk

我在 上测试了这个~ -maxdepth 1,整数让我震惊,OP 末尾的“GB”东西,所以我一直玩到我得到 10**6 = 16x64K。

相关内容