升级到 Debianstretch 后,Tar 排除列表不再起作用

升级到 Debianstretch 后,Tar 排除列表不再起作用

我很早之前写过一个备份脚本,里面使用了tar 手册的这一部分

您可以给出多个“--exclude”选项。

--exclude-from=file

-X file

导致 tar 忽略与 file 中列出的模式匹配的文件。

我的 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 杰西Debian 拉伸。版本变化很小,不知道是不是这个原因。

我尝试更改/data/webapp/webapp-data/*/data/webapp/webapp-data/**,但这没有帮助。

为什么排除列表不再起作用?

答案1

从 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

答案2

我(终于)找到了问题并能够解决它。它是多种事物的组合,包括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/

相关内容