考虑我有一个文件夹/home/abdul/backup
,其中包含.gz
过去 1 年的文件...我的要求是获取过去 7 天的大小...
答案1
find /home/abdul/backup -daystart -name '*.gz' -mtime -7 -exec du -h '{}' ';'
怎么运行的:
find
- 它在锡上说了什么;因为您没有指定您正在使用哪个操作系统,所以我假设您可以访问 GNU find。
/home/abdul/backup
- 起始目录
-daystart
- 测量从一天开始以来的时间(可能是也可能不是您想要的)
-name '*.gz'
- 只考虑名称以.gz
(或更准确地说,匹配*.gz
)结尾的文件
-mtime -7
- 文件最近修改时间7*24 小时,考虑到 -daystart
-exec du -h '{}' ';'
- 执行du
以人类可读的单位打印指定文件的大小({}
扩展到有问题的文件名)
这将列出所有已被删除的文件修改的在过去 7 天内。根据您运行的具体操作系统和文件系统,可能可以检查文件的创建时间,但许多 *nix 系统不会跟踪文件最初创建或“诞生”的时间。
答案2
find . -ctime -7 | xargs ls -l | awk '{ TOTAL += $5;} END{print TOTAL;}'
这将首先列出当前目录中小于 7*24 小时的文件,获取它们的大小(以字节为单位),总结并为您提供结果。
答案3
如果您的文件名不包含空格或其他奇怪的字符,您可以这样做:
du -sch "$(find /home/abdul/backup -name '*.gz' -mtime +7) "
对于空格和其他奇怪的字符,请使用以下命令:
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | xargs -0 du -sch
如果你有一个很多与您的条件匹配的文件 上面的两个命令都将失败。第一个是因为文件列表太长,第二个是因为xargs
将分成多个命令并返回每个子集的总数。
避免这些问题的另一个解决方案是(感谢 Paulo Almeida,他的评论提到过):
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | du -sch --files0-from -
从man du
:
--files0-from=F
summarize disk usage of the NUL-terminated
file names specified in file F; If F is - then
read names from standard input