TAR覆盖目录的内容
TAR override the contents of the directory
我对 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
的全部内容
任何意见都会有帮助吗?
谢谢!
我认为 /etc/init.d
是 link 到 /etc/rc.d/init.d
。
当您取消tarred 那个文件时,它会用一个目录覆盖link。您的所有文件仍在 /etc/rc.d/init.d
.
中
要解决您的问题,请删除 /etc/init.d
,重新 link,然后将 h
添加到 tar 命令:
rm -rf /etc/init.d
cd /etc
ln -s ./rc.d/init.d
cd /
tar xhf /tmp/env_pkg_1.tar
您可以使用 -k
或 --keep-old-files
,因此它不会触及目标中已有的任何文件。根据您在 /etc/init.d/
中的输出判断,您想保留 network
和 README
并在它们旁边提取 sshd
,因此在您的情况下,它们不会重叠。
或者,--keep-newer-files
将 tar 替换 tar 存档中比目标位置更新的文件..
我对 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
的全部内容任何意见都会有帮助吗?
谢谢!
我认为 /etc/init.d
是 link 到 /etc/rc.d/init.d
。
当您取消tarred 那个文件时,它会用一个目录覆盖link。您的所有文件仍在 /etc/rc.d/init.d
.
要解决您的问题,请删除 /etc/init.d
,重新 link,然后将 h
添加到 tar 命令:
rm -rf /etc/init.d
cd /etc
ln -s ./rc.d/init.d
cd /
tar xhf /tmp/env_pkg_1.tar
您可以使用 -k
或 --keep-old-files
,因此它不会触及目标中已有的任何文件。根据您在 /etc/init.d/
中的输出判断,您想保留 network
和 README
并在它们旁边提取 sshd
,因此在您的情况下,它们不会重叠。
或者,--keep-newer-files
将 tar 替换 tar 存档中比目标位置更新的文件..