如何防止从tar文件提取命令覆盖的符号链接

for*_*t17 3 unix linux bash tar centos7

注意:从tar版本1.27或更高版本覆盖符号链接

下面我试图说明究竟是什么问题.

dirtmp1的内容

file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)

用于创建上述目录的代码

rm -f -r dirtmp1 && mkdir dirtmp1 && cd dirtmp1 && touch file1.txt && touch file2.txt && ls -al
Run Code Online (Sandbox Code Playgroud)

创建一个符号链接

cd ..
ln -s dirtmp1/ symlink1
Run Code Online (Sandbox Code Playgroud)

现在创建包含名称为symlink1的tar文件

mkdir dirtmp1
cd dirtmp1
mkdir symlink1 && cd symlink1 && touch iNeedThisfile.txt && cd .. && tar -cvzf symlink1.tar.gz symlink1/
Run Code Online (Sandbox Code Playgroud)

解压缩文件夹(symlnk1)中的tar文件会覆盖符号链接.我想要的只是保留符号链接并复制"iNeedThisfile.txt"

运行此命令后 tar -xvf symlink1.tar.gz

symlink1: total 0 -rw-r--r-- 1 root root 0 Mar 24 18:14 iNeedThisfile.txt

提取时的任何标志,在提取时保留符号链接.并将文件复制到符号链接指向的文件夹.

我为无法用更少的文字传达我的信息而道歉.

小智 7

我有同样的问题.在我的例子中,tar 1.23具有正确的行为(保留了符号链接),而1.26具有"新"行为(删除了符号链接并创建了一个目录).

我发现在-TRTRACT的tar上添加-h标志可以完成这项工作.保留符号链接,并将文件添加到它指向的目录中.

例如,我必须从tar zxf foo.tar.gz转到tar -h -zxf foo.tar.gz

  • 添加-h标志在tar版本1.26中对我不起作用.Centos 7.提取内容删除符号链接:( (2认同)