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

Udo*_*o G 21 tar

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

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

# find
.
./sys
./sys/bla
./foo
./foo/sys
./foo/sys/bla
Run Code Online (Sandbox Code Playgroud)

我想排除./sys不是 ./foo/sys.

我似乎找不到--exclude那样做的模式......

# tar cvf /dev/null * --exclude=sys
foo/
Run Code Online (Sandbox Code Playgroud)

要么...

# tar cvf /dev/null * --exclude=/sys
foo/
foo/sys/
foo/sys/bla
sys/
sys/bla
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?(Linux Debian 6)

Cha*_*esB 10

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

tar --exclude=/sys --exclude=/proc /
Run Code Online (Sandbox Code Playgroud)

  • 没错,但关于这一点的重要细节是,排除的文件名必须与`tar`列表报告的符号完全匹配.我的例子就是`./ sys` - 正如我刚刚发现的那样. (3认同)

pjv*_*pjv 6

在这种情况下,您可能希望使用:

--anchored --exclude=sys/\*
Run Code Online (Sandbox Code Playgroud)

因为如果你的tar没有显示前导"/",你就会遇到过滤器问题.

  • 啊找到了!在bsdtar中,锚是"^":`bsdtar cvjf test.tar.bz2 --exclude myfile.avi --exclude"^ myexcludedfolder"*` (3认同)

Ste*_*ker 5

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

创建标记文件,

touch /sys/.exclude_from_backup
touch /proc/.exclude_from_backup
Run Code Online (Sandbox Code Playgroud)

然后,

tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup *
Run Code Online (Sandbox Code Playgroud)

  • 理论上的好主意,但经常/ sys和/ proc无法写入. (2认同)