2016-11-30 62 views
1

的末尾添加“/”如果我使用这个命令:焦油 - 排除标记不排除目录,如果我在路径

sudo tar -zcvpf exclusion.tar.gz mybkup/ --exclude=mybkup/etc/ssh/ 

然后如果我尝试看看是否包含在SSH目录在压缩包内容,我看到实际上包括:

[[email protected] ~]$ tar -tvzf exclusion.tar.gz | grep ssh 
lrwxrwxrwx user/user   0 2016-11-30 04:26 mybkup/etc/systemd/system/multi-user.target.wants/sshd.service -> /usr/lib/systemd/system/sshd.service 
-rw-r----- user/user  506 2016-11-30 04:26 mybkup/etc/sysconfig/sshd 
-rw-r--r-- user/user  5996 2016-11-30 04:26 mybkup/etc/xdg/autostart/gnome-keyring-ssh.desktop 
drwxr-xr-x user/user   0 2016-11-30 04:26 mybkup/etc/ssh/ 
-rw-r--r-- user/user 242153 2016-11-30 04:26 mybkup/etc/ssh/moduli 
-rw-r--r-- user/user  2208 2016-11-30 04:26 mybkup/etc/ssh/ssh_config 
-rw-r--r-- user/user  382 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_rsa_key.pub 
-rw-r--r-- user/user  162 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_ecdsa_key.pub 
-rw-r--r-- user/user  4760 2016-11-30 04:26 mybkup/etc/ssh/sshd_config 
-rw-r--r-- user/user  82 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_ed25519_key.pub 
-rw-r----- user/user  1675 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_rsa_key 
-rw-r----- user/user  227 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_ecdsa_key 
-rw------- user/user  4361 2016-11-30 04:26 mybkup/etc/ssh/sshd_config.rpmnew 
-rw-r----- user/user  387 2016-11-30 04:26 mybkup/etc/ssh/ssh_host_ed25519_key 
-rw-r--r-- user/user  8730 2016-11-30 04:26 mybkup/etc/selinux/targeted/modules/active/modules/rssh.pp 
-rw-r--r-- user/user  18774 2016-11-30 04:26 mybkup/etc/selinux/targeted/modules/active/modules/ssh.pp 
-rw-r--r-- user/user  904 2016-11-30 04:26 mybkup/etc/pam.d/sshd 

,但如果我不加最后一个“/”的目录路径结束,现在它排除的目录:

sudo tar -zcvpf exclusion.tar.gz mybkup/ --exclude=mybkup/etc/ssh 

tar -tvzf exclusion.tar.gz | grep ssh 

lrwxrwxrwx user/user   0 2016-11-30 04:26 mybkup/etc/systemd/system/multi-user.target.wants/sshd.service -> /usr/lib/systemd/system/sshd.service 
-rw-r----- user/user  506 2016-11-30 04:26 mybkup/etc/sysconfig/sshd 
-rw-r--r-- user/user  5996 2016-11-30 04:26 mybkup/etc/xdg/autostart/gnome-keyring-ssh.desktop 
-rw-r--r-- user/user  8730 2016-11-30 04:26 mybkup/etc/selinux/targeted/modules/active/modules/rssh.pp 
-rw-r--r-- user/user  18774 2016-11-30 04:26 mybkup/etc/selinux/targeted/modules/active/modules/ssh.pp 
-rw-r--r-- user/user  904 2016-11-30 04:26 mybkup/etc/pam.d/sshd 

我很困惑,因为我认为通过指示tar排除目录,它会排除目录及其内容,但显然不是这种情况,请有人解释一下吗?

+0

目录名称不会以'/'结尾。这只是我们用于可读性的惯例。您会注意到'tar'将目录保存为'mybkup/etc/sysconfig/sshd'而不是'mybkup/etc/sysconfig/sshd /'。当tar比较'sshd == sshd /'时,显然它们不相等。 – alvits

回答

1

首先,快速提示。您可以在不实际创建一个tar文件,这样测试的行为更容易:

tar c mybkup/ --exclude=mybkup/etc/ssh/ | tar t 

我希望你能欣赏这美景。

排除模式定义非常简单。 不幸的是,man tar没有解释如何写入“PATTERN”以及如何解释它。

基于一些观察,我提出了以下推理。 在您的示例中,不排除mybkup/etc/ssh/,因为它既不是文件也不是目录。虽然mybkup/etc/ssh是一个目录,但是mybkup/etc/ssh/不是。换句话说,尾随/不是目录名称的一部分,因此它不被视为一个目录,因此简单地忽略,不排除。

恐怕就是这样。这是一个原始的特征。

虽然壳环球不错。例如,假设您的文件,如果你这样做:

tar c mybkup --exclude='mybkup/etc/sy*' | tar t 

这将排除mybkup/etc/systemdmybkup/etc/sysconfig目录及其内容。 (请注意,引用mybkup/etc/sy*以便tar将解释*而不是shell)很重要。)

0

--exclude = PATTERN

排除文件,给出一个模式

当您使用--exclude =为MyBackup的/ etc/SSH /焦油没有得到图案的任何精确匹配。并且当你使用--exclude = mybackup/etc/ssh tar时,获取模式的精确匹配。

+0

以及我认为我注意到只是通过查看输出,但问题是为什么?该目录被称为ssh /,为什么它没有得到任何完全匹配的模式? – VaTo