升级到 Debian 拉伸后,Tar 排除列表不再起作用

The*_*ist 6 tar backup debian upgrade

很久以前写过一个备份脚本,用到了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
Run Code Online (Sandbox Code Playgroud)

这是include.txt

/etc/
/var/
/usr/
/data/
/opt/
/root
Run Code Online (Sandbox Code Playgroud)

这是 exclude.txt

/data/webapp/webapp-data/*
/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*
Run Code Online (Sandbox Code Playgroud)

它曾经工作得很好。最近我注意到存档的大小显着增加,通过切换到详细tar让我看到它包含了webapp-data巨大的目录。出于某种原因,它不再被排除在外。

我做的最后一件事是从Debian Jessie升级到Debian Stretch。版本变化很小,不知道是不是这个原因。

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

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

小智 5

从 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页面末尾 )


The*_*ist 1

我(终于)找到了问题并能够解决它。它是多种事物的组合,包括excludes作为通配符给出的事物(在提出问题之前我没有这样做......现在它不再起作用了)。这是有效的命令:

includesFile=include.txt
excludesFile=exclude.txt
tar -zcpf - --absolute-names -X ${excludesFile} -T ${includesFile} | openssl des3 -salt | dd of=out.bak
Run Code Online (Sandbox Code Playgroud)

当然,排除项以这种形式给出:

/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*
/proc/*
/sys/*
Run Code Online (Sandbox Code Playgroud)

并包括:

/etc/
/var/
/usr/
Run Code Online (Sandbox Code Playgroud)