我需要找到大于 500M 且超过 1 天的文件,并且需要压缩这些文件。我还需要省略扩展名为 .gz 的文件。如何才能实现呢?
答案1
LC_ALL=C find . ! -name '*.gz' \
-type f \
-size +"$((500*1024*1024))c" \
-mtime +0 \
-exec gzip {} +
这里用于gzip
压缩。另请参阅xz
、bzip2
或compress
了解具有不同压缩格式的其他压缩实用程序。
请注意,某些find
实现(例如 GNU)find
也支持-size +500M
.
您可以添加-v
选项以gzip
获取有关进度的一些信息。
如果file
和都file.gz
存在,您将收到确认提示。-f
如果您想强制压缩,请添加该选项,或者< /dev/null
如果您不希望被file.gz
覆盖并且不想回答提示,请添加该选项。
请注意,-mtime +0
检查年龄是否以整数天数四舍五入向下大于 0,因此对于存在时间为 1 天或以上的文件来说,该值成立,同时-size +500M
检查大小(以兆字节为单位的整数)是否四舍五入向上大于500
,因此对于大小为的文件也是如此严格地大于 500M(524288000 字节)。
这LC_ALL=C
是为了确保*.gz
匹配名称以 结尾的文件,.gz
无论文件名的开头是否包含当前语言环境中的有效字符。不过,这会产生影响错误消息语言的大小效应。
如果您想在不实际执行的情况下检查它会做什么,请替换gzip
为echo gzip
.