tar排除单个文件/目录,而不是模式


tar exclude single files/directories, not patterns

我正在使用tar对服务器进行日常备份,并希望避免备份/proc和/sys系统目录,但不排除文件树中其他位置名为"proc"或"sys"的任何目录。

例如,具有以下目录树("bla"是普通文件):

1
2
3
4
5
6
7
# find
.
./sys
./sys/bla
./foo
./foo/sys
./foo/sys/bla

我想排除./sys,但不排除./foo/sys

我似乎找不到一个能做到这一点的--exclude模式……

1
2
# tar cvf /dev/null * --exclude=sys
foo/

或者…

1
2
3
4
5
6
# tar cvf /dev/null * --exclude=/sys
foo/
foo/sys/
foo/sys/bla
sys/
sys/bla

有什么想法吗?(Linux Debian 6)


您可以指定排除模式的绝对路径,这样其他sysproc目录将被存档:

1
tar --exclude=/sys --exclude=/proc /


在这种情况下,您可能需要使用:

1
--anchored --exclude=sys/\*

因为如果您的tar没有显示前导的"/",则说明过滤器有问题。


使用tar,可以通过将标记文件放在任何应跳过的目录中来排除目录。

创建标记文件,

1
2
touch /sys/.exclude_from_backup
touch /proc/.exclude_from_backup

然后,

1
tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup *