Tar 压缩时通配符的问题

问题

因为程序生成的日志很大,而通过压缩可以达到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

你可能感兴趣的:(#,Ubuntu)