问题
因为程序生成的日志很大,而通过压缩可以达到10%的压缩率,所以在程序结束时将日志压缩成gz包,这样可以节省硬盘空间和传输效率。
实际使用中,把日志放在了/tmp文件夹下,而程序不定在哪个文件夹下,所以一开始使用的压缩命令行如下tar -czvPf /tmp/test.tar.gz /tmp/*.log
,打开压缩包发现包内有全路径,需要多次进入后才能看到log文件。这使操作略微不便。
尝试
百度后,得知可以用-C /tmp
去除压缩包内的全路径的——嗯,用tar -czvPf /tmp/test.tar.gz -C /tmp aa.log bb.log
的确没路径了。
然后用tar -czvPf /tmp/test.tar.gz -C /tmp *.log
就报错:找不到*.log
这文件。
在【Tar 压缩时 -C *的问题】中提到,通配符是由Shell进行展开的,所以在tar命令执行前*.log已经被扩展成了aa.log bb.log
。
而这Shell通配符扩展需要在全路径下或当前路径下,因为tar -czvPf /tmp/test.tar.gz -C /tmp *.log
这个中用的是相对路径,所以在shell的当前路径下扩展*.log
。
奇怪的是,如果Shell 在当前路径扩展不了*.log
,怎么还会把*.log
作为参数传给tar
呢。
所以还是使用cd /tmp && tar -czvf test.tar.gz *.log
更加地简单明了了吧。
结论
去除包内全路径,并且使用通配符,需要使用cd /tmp && tar -czvf test.tar.gz *.log
。