我很早之前写过一个备份脚本,里面使用了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/