![为什么 tar 无法改变当前目录?](https://linux22.com/image/719566/%E4%B8%BA%E4%BB%80%E4%B9%88%20tar%20%E6%97%A0%E6%B3%95%E6%94%B9%E5%8F%98%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
以下命令:
tar -C "${HOME}/temp" -zcvf uber-bundle.tgz temp
失败并出现以下错误:
tar: temp: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
然而,稍微不同的命令可以工作,尽管生成的 tar 具有错误的目录结构:
tar -C "${HOME}/temp" -zcvf uber-bundle.tgz ~/temp
tar: Removing leading `/' from member names
...
很明显,-C 选项无法将 tar 的当前目录更改为 ${HOME},导致目录无法识别。出了什么问题,如何修复?
答案1
这里发生的事情是 -C 选项告诉 tar 在创建存档之前先更改目录。因此,在第一个示例中,您所做的基本如下:
cd /home/whatever/temp/; tar -zcvf uber-bundle.tgz temp;
现在你确定在这个路径“/home/whatever/temp/”中有一个额外的“temp”目录吗?
在第二个例子中,由于您使用绝对路径 ~/temp 作为 tar 参数,即使 tar 将您的目录更改为 '/home/whatever/temp/',它也会根据 ~/temp 的参数进行操作,因此您执行以下操作:
cd /home/whatever/temp/; tar -zcvf uber-bundle.tgz ~/temp;
因此,在这种情况下,问题在于您正在创建当前所在目录的 tar 存档。