用于压缩目录中 1GB 以上所有文件的 Shell 脚本

用于压缩目录中 1GB 以上所有文件的 Shell 脚本

我需要创建一个脚本,将我的/var/logs/*.log文件中所有大小超过 1GB 的文件压缩到/var/logs/*.zip.例如:access_log.log如果access_log.zip其大小超过 1024 MB。

答案1

这可能有效(从 运行/var/log):

find *.log -type f -size +1G |xargs -L1 -I file zip file.zip file

解释

  • find *.log -type f -size +1G查找所有大于 1GB 的文件
  • xargs -L1 -I file zip file.zip file压缩每个文件

xargs如果您使用的是多核系统(您可能是),您可以通过给出参数并行运行(例如)4 个 zip 命令-P4

如果您有兴趣节省更多空间,可以尝试提供zip-9选项。

另外,值得注意的是,在 Unix 世界中gzipbzip2、 和xz/比 Zip 更常见。lzip

答案2

查看该示例的 find -size 选项 1M :

find . -size +1M --exec gzip {} \;

如果它位于 /var/log 文件夹中,您可能更喜欢使用 logrotate 方法来管理文件历史记录和自动压缩

相关内容