TAR覆盖目录的内容

问题描述 投票:0回答:2

我对tar命令的理解是,如果存在文件,它将覆盖文件的内容。否则它将保持现有状态。

[root@something~]# ls -al /etc/init.d/
total XX
drwxr-xr-x.  2 root root    83 Jun 14  2018 .
drwxr-xr-x. 10 root root   127 Jun  6  2017 ..
-rwxr-xr-x.  1 root root  7293 Jan  2  2018 network
-rw-r--r--.  1 root root  1160 Feb 20  2018 README
[root@something~]# tar tvf /tmp/env_pkg_1.tar 
drwxr-xr-x staff    0 2020-05-29 19:42 etc/
drwxr-xr-x user/staff    0 2020-05-29 18:04 etc/init.d/
-rw-r--r-- user/staff 3383 2020-05-29 18:04 etc/init.d/sshd
[root@something~]# cd /
[root@something /]# tar xf /tmp/env_pkg_1.tar 
[root@something/]# ls -al /etc/init.d/
total 16
drwxr-xr-x   2 XXXXXX XXXXXX 18 May 29 18:04 .
drwxr-xr-x. 85 XXXXXX XXXXXX 8192 May 29 19:42 ..
-rw-r--r--   1 XXXXXX XXXXXX 3383 May 29 18:04 sshd

我不明白为什么tar替换了/etc/init.d的全部内容

任何输入都会有用吗?

谢谢!

bash shell unix tar
2个回答
1
投票

我相信/etc/init.d/etc/rc.d/init.d的链接。

解压缩该文件后,它会用目录覆盖链接。您的所有文件仍在/etc/rc.d/init.d中。

要解决您的情况,请删除/etc/init.d,重新链接,然后在tar命令中添加h

rm -rf /etc/init.d
cd /etc
ln -s ./rc.d/init.d
cd /
tar xhf /tmp/env_pkg_1.tar

0
投票

您可以使用-k--keep-old-files,因此它不会触摸目的地中已经存在的任何文件。从/etc/init.d/中的输出来看,您想要保留networkREADME,并在它们旁边提取sshd,因此在您的情况下,它们不会重叠。

或者,--keep-newer-files将用tar替换tar存档中的更新文件,而不是目的地中的文件。

© www.soinside.com 2019 - 2024. All rights reserved.