2016-11-30 59 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