![使用 find 计算 1000 天以上的文件所使用的总磁盘空间](https://linux22.com/image/164282/%E4%BD%BF%E7%94%A8%20find%20%E8%AE%A1%E7%AE%97%201000%20%E5%A4%A9%E4%BB%A5%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E6%80%BB%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4.png)
我们的系统中有超过 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。