技术问询:如何将文件直接压缩至.tar.gz根目录,避免嵌套归档
让我来一步步帮你解决这两个tar归档的问题:
要把文件直接放在tar包的根目录,核心就是别让归档命令带上文件的上级目录路径,分两种常用场景处理:
如果要打包的文件就在当前工作目录:
直接指定文件名/通配符就行,比如把当前目录下所有.txt文件打包到archive.tar:tar -cf archive.tar *.txt生成的tar包里,所有txt文件都会直接在根目录,不会带任何路径前缀。
如果要打包的文件在其他目录(比如
/home/user/documents):
用-C选项先切换到目标目录,再执行打包,这样tar会把目标目录下的内容直接归档到根目录,不会带上原目录的路径:tar -cf archive.tar -C /home/user/documents .这里的
.代表目标目录下的所有内容,你也可以换成具体的文件名或通配符(比如*.pdf)来精准打包。
首先得说:你给出的命令GZIP=-9 tar -czf temp.tar.gz *.txt本身是正确的,正常情况下不会生成嵌套归档包。出现嵌套大概率是这两个原因之一:
旧的归档文件被误打包进去了:如果之前已经生成过
temp.tar.gz,又不小心用了错误的通配符(比如*而不是*.txt),就会把旧的tar.gz也打包进去,导致嵌套。解决办法很简单:- 先删掉旧的归档文件:
rm temp.tar.gz - 再重新执行你的命令,确保只匹配
.txt文件。
- 先删掉旧的归档文件:
某个.txt文件其实是tar包:如果不小心把之前的tar归档包重命名成了
.txt后缀,打包时也会把它包含进去,造成嵌套。可以用file *.txt命令检查每个txt文件的实际类型,把异常的文件排除掉。
确认没问题后,再执行你的命令:
GZIP=-9 tar -czf temp.tar.gz *.txt
生成的tar.gz里,所有.txt文件都会直接躺在根目录,不会有嵌套的归档包。
另外给你个小技巧:打包后可以用tar -tzf temp.tar.gz命令查看归档里的文件列表,提前验证文件是否在根目录,有没有嵌套情况。
内容的提问来源于stack exchange,提问作者sjaak

