Linux 如何防止tar提取覆盖符号链接目录

Linux 如何防止tar提取覆盖符号链接目录,linux,bash,unix,tar,centos7,Linux,Bash,Unix,Tar,Centos7,注意:tar版本1.27或更高版本会覆盖符号链接 下面我试图说明问题到底是什么 目录1的内容 file1.txt file2.txt 创建上述目录的代码 rm -f -r dirtmp1 && mkdir dirtmp1 && cd dirtmp1 && touch file1.txt && touch file2.txt && ls -al 创建符号链接 cd .. ln -s dirtmp1/ symlink

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

下面我试图说明问题到底是什么

目录1的内容

file1.txt
file2.txt
创建上述目录的代码

rm -f -r dirtmp1 && mkdir dirtmp1 && cd dirtmp1 && touch file1.txt && touch file2.txt && ls -al
创建符号链接

cd ..
ln -s dirtmp1/ symlink1
现在创建tar文件,其中包含名称symlink1

mkdir dirtmp1
cd dirtmp1
mkdir symlink1 && cd symlink1 && touch iNeedThisfile.txt && cd .. && tar -cvzf symlink1.tar.gz symlink1/
提取文件夹(symlnk1)中的tar文件将覆盖符号链接。我只想保留符号链接并复制“inedthisfile.txt”

在运行这个命令之后,
tar-xvf symlink1.tar.gz

symlink1:
总数0
-rw-r--r--1根根目录0 Mar 24 18:14 inedthis file.txt

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


我很抱歉不能用更少的文字表达我的信息。

我也有同样的问题。在我的例子中,tar1.23具有正确的行为(保留符号链接),而1.26具有“新”的行为(删除符号链接并创建目录)

我发现在摘录的tar中添加-h标志就可以了。符号链接将被保留,文件将添加到它所指向的目录中

例如,我必须从

tar zxf foo.tar.gz


我使用的是Debian,Brian提供的答案对我不适用。再次阅读OP,我现在意识到OP想要保留目录的符号链接,而我想要保留每个单独文件的符号链接。但由于这是我在这方面发现的唯一一个成功案例,而且我已经打印出了我的答案,因此我将提供它,以保留每个文件的符号链接

这就是我找到的解决方案

首先,我的Debian,正如我们所说:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
我的tar是1.30+dfsg-6:

$ apt-cache policy tar
tar:
  Installed: 1.30+dfsg-6
  Candidate: 1.30+dfsg-6
  Version table:
 *** 1.30+dfsg-6 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status
我发现的是

  • tar-h-xvf symlink1.tar.gz
    将无法工作。以这种方式提取内容将删除符号链接
    tar-h--no overwrite dir-xvf symlink1.tar.gz
    也不会工作。但是,
  • tar-h--overwrite-xvf symlink1.tar.gz
    可以工作!以这种方式提取内容将保留每个文件的符号链接,但是
  • tar-h--overwrite-xvJf symlink1.tar.xz
    将不起作用。也就是说,适用于
    .tar.gz
    的文件将不适用于
    .tar.xz
    文件

HTH适用于希望保留每个单独文件的符号链接的任何人。

您确定这不起作用吗?这在CentOS 5机器上对我有效。你想从tar文件中提取一个文件吗
tar-xvf{symlink1.tar.gz}{path/to/file}
@Etan-Reisner不,它不在centos 7,tar版本1上工作。26@Hidd3n我不想提取单个文件,但在提取时不想覆盖指向该文件的符号链接。为什么要将tar提取到另一个不退出符号链接文件的路径?@Brain非常感谢您的回复,我阅读了文档,但没有看到-h标志。我将尝试以下方法:)添加-h标志在tar版本1.26中对我不起作用。Centos 7。提取内容会删除符号链接:(适用于REHL 7。那篇sh*t文章让我沮丧了两天。+1我不知道它适用于哪个操作系统,但我使用@forum.test17——它在我的Debian中不起作用,正如我们所说的tar 1.30+dfsg-6。使用
tar-h-zxf
提取内容也会删除符号链接。
$ apt-cache policy tar
tar:
  Installed: 1.30+dfsg-6
  Candidate: 1.30+dfsg-6
  Version table:
 *** 1.30+dfsg-6 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status