Debian

升級到 Debian 伸展後,Tar 排除列表不再起作用

  • April 6, 2019

我很久以前寫了一個備份腳本,它使用了 tar 手冊的這一部分

您可以提供多個 `–exclude’ 選項。

--exclude-from=file

-X file

導致 tar 忽略與文件中列出的模式匹配的文件。

我的 tar 命令如下:

includesFile=include.txt
excludesFile=exclude.txt
tar zcpf - . -T ${includesFile} -X ${excludesFile} | openssl des3 -salt | dd of=out.bak

這是include.txt

/etc/
/var/
/usr/
/data/
/opt/
/root

這是exclude.txt

/data/webapp/webapp-data/*
/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*

它曾經工作得很好。最近我注意到存檔的大小顯著增加,通過切換到詳細tar讓我看到它包含了webapp-data巨大的目錄。由於某種原因,它不再被排除在外。

我做的最後一件事是從Debian Jessie升級到Debian Stretch。版本變化很小,不知道是不是這個原因。

我嘗試更改/data/webapp/webapp-data/*/data/webapp/webapp-data/**,但這沒有幫助。

為什麼排除列表不再起作用?

我(終於)找到了問題並能夠解決它。它是多種事物的組合,包括excludes作為萬用字元給出的事物(在提出問題之前我沒有這樣做……現在這不再起作用了)。這是有效的命令:

includesFile=include.txt
excludesFile=exclude.txt
tar -zcpf - --absolute-names -X ${excludesFile} -T ${includesFile} | openssl des3 -salt | dd of=out.bak

當然,排除以這種形式給出:

/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*
/proc/*
/sys/*

並包括:

/etc/
/var/
/usr/

從 Debian Jessie 升級到 Stretch 後,我在 tar 排除方面遇到了同樣的問題,我只需將命令行參數順序

從: 更改

tar cvzpf backup.tar.gz /DirToBackup1 /DirToBackup2 --exclude-from=/path/to/backup_exclude.txt

為:

tar cvzpf backup.tar.gz --exclude-from=/path/to/backup_exclude.txt /DirToBackup1 /DirToBackup2

我的 backup_exclude.txt 看起來像這樣 /var/log/* /cache/* /.cache/*

(參考https://www.gnu.org/software/tar/manual/html_section/tar_49.html頁面末尾 )

引用自:https://unix.stackexchange.com/questions/385869