Bash 如果要附加到现有的.gz文件(如果存在),如何安全地进行gzip并删除该文件?
我的脚本当前如下所示:Bash 如果要附加到现有的.gz文件(如果存在),如何安全地进行gzip并删除该文件?,bash,shell,find,gzip,xargs,Bash,Shell,Find,Gzip,Xargs,我的脚本当前如下所示: find Logs/ -type f -name \*.log -exec gzip -q -9 {} \; $ ./test-gzip-combine.sh ---- logs/a.log.gz compressed uncompressed ratio uncompressed_name 38 12 50.0% logs/a.log hello world --
find Logs/ -type f -name \*.log -exec gzip -q -9 {} \;
$ ./test-gzip-combine.sh
---- logs/a.log.gz
compressed uncompressed ratio uncompressed_name
38 12 50.0% logs/a.log
hello
world
---- logs/b.log.gz
compressed uncompressed ratio uncompressed_name
31 5 120.0% logs/b.log
miss
---- logs/c.log.gz
compressed uncompressed ratio uncompressed_name
32 6 100.0% logs/c.log
think
现在,如果myLog.log.gz已经存在,则此操作将失败。相反,我想附加到myLog.log.gz。gzip手册页面说,您可以使用类似于gzip-cmylog.log>>myLog.log.gz
的东西来实现这一点。但这不会在完成gzip时删除myLog.log
如何安全地gzip并删除该文件,必要时附加到现有的.gz?首先,根据您想要执行的操作(例如,仅出于存档目的),仅对这两个文件进行tar或类似操作可能更合适。然而,以下是您解释的需求 我真的希望:)有一种更简洁的方法可以做到这一点,但缺少这种方法: 这里有一个小的测试脚本-将上面的脚本放在
gzip combine.sh
中,下面的脚本放在test gzip combine.sh
中,并在某个临时文件夹中运行它(如您所见,它会删除该文件夹下的logs
,因此不要在实际有日志的地方运行它:):
输出如下所示:
find Logs/ -type f -name \*.log -exec gzip -q -9 {} \;
$ ./test-gzip-combine.sh
---- logs/a.log.gz
compressed uncompressed ratio uncompressed_name
38 12 50.0% logs/a.log
hello
world
---- logs/b.log.gz
compressed uncompressed ratio uncompressed_name
31 5 120.0% logs/b.log
miss
---- logs/c.log.gz
compressed uncompressed ratio uncompressed_name
32 6 100.0% logs/c.log
think
因此,您可以看到它结合了a.log
中的world
和a.log.gz
,这是上面gzip logs/a.log
的结果,其中包含hello
显然,由于许多原因(例如,如果磁盘空间不足、电量不足或日志都是1GB或诸如此类的情况),这并不是万无一失的,但对于大多数常规应用程序,它应该可以完成这项工作
希望这能有所帮助。首先,根据您想做什么(例如,仅出于存档目的),只对这两个文件进行tar可能更合适。然而,以下是您解释的需求 我真的希望:)有一种更简洁的方法可以做到这一点,但缺少这种方法: 这里有一个小的测试脚本-将上面的脚本放在
gzip combine.sh
中,下面的脚本放在test gzip combine.sh
中,并在某个临时文件夹中运行它(如您所见,它会删除该文件夹下的logs
,因此不要在实际有日志的地方运行它:):
输出如下所示:
find Logs/ -type f -name \*.log -exec gzip -q -9 {} \;
$ ./test-gzip-combine.sh
---- logs/a.log.gz
compressed uncompressed ratio uncompressed_name
38 12 50.0% logs/a.log
hello
world
---- logs/b.log.gz
compressed uncompressed ratio uncompressed_name
31 5 120.0% logs/b.log
miss
---- logs/c.log.gz
compressed uncompressed ratio uncompressed_name
32 6 100.0% logs/c.log
think
因此,您可以看到它结合了a.log
中的world
和a.log.gz
,这是上面gzip logs/a.log
的结果,其中包含hello
显然,由于许多原因(例如,如果磁盘空间不足、电量不足或日志都是1GB或诸如此类的情况),这并不是万无一失的,但对于大多数常规应用程序,它应该可以完成这项工作
希望这有帮助。它不应该匹配,因为您在
*.log
-它不应该匹配*.log.gz
。这需要*.log*
。它不应该失败吗?如果我将myLog.log和myLog.log.gz都放在同一个目录中,它就会失败,因为gzip不想覆盖myLog.log.gzyes,但请注意手册页中的示例是gzip-c file1>foo.gz;gzip-c file2>>foo.gz
。连接的文件名与gz文件不同。您所拥有的将弄乱现有的myLog.log.gz,或者至少会导致大量重复数据存储到.gz文件中,即ver1log>>log.gz;ver2log>>log.gz ver3log>>log.gz
祝你好运。它不应该匹配,因为你在*.log
上匹配-它不应该匹配*.log.gz
。这需要*.log*
。它不应该失败吗?如果我将myLog.log和myLog.log.gz都放在同一个目录中,它就会失败,因为gzip不想覆盖myLog.log.gzyes,但请注意手册页中的示例是gzip-c file1>foo.gz;gzip-c file2>>foo.gz
。连接的文件名与gz文件不同。您所拥有的将弄乱现有的myLog.log.gz,或者至少会导致大量重复数据存储到.gz文件中,即ver1log>>log.gz;ver2log>>log.gz ver3log>>log.gz
祝你好运。