tar 分别创建多个日志文件的脚本

script to tar up multiple log files separately

我在 RedHat Linux 6 机器上,运行 Elasticsearch 和 Logstash。我有一堆日志文件,从 6 月到 8 月每天轮换。我正在尝试找出 tar 它们的最佳方法以节省一些磁盘空间,而无需手动 tar 更新每个。我是脚本方面的新手,所以我想知道是否有人可以帮助我?这些文件的名称为 elasticsearch-cluster.log.datestamp。理想情况下,它们都在各自的 tar 文件中,这样可以更轻松地返回并在需要时查看特定日期的日志。

你可以使用循环:

for file in elasticsearch-cluster.log.*
do 
    tar zcvf "$file".tar.gz "$file"
done

或者,如果您更喜欢单行代码(这是递归的):

find . -name 'elasticsearch-cluster.log.*' -print0 | xargs -0 -I {} tar zcvf {}.tar.gz {}

或@chepner 在 -exec 选项中提到:

find . -name 'elasticsearch-cluster.log.*' -exec tar zcvf {}.tar.gz {} \;

或者如果要排除已经压缩的文件:

find . -name 'elasticsearch-cluster.log.*' -not -name '*.tar.gz' -exec tar zcvf {}.tar.gz {} \;

如果您不介意所有文件都在一个 tar.gz 文件中,您可以这样做:

tar zcvf backups.tar.gz elasticsearch-cluster.log.*

所有这些命令都会保留原始文件。验证 tar.gz 文件后,您可以手动删除它们。