tar 排除单个文件/目录,而不是模式
Posted
技术标签:
【中文标题】tar 排除单个文件/目录,而不是模式【英文标题】:tar exclude single files/directories, not patterns 【发布时间】:2012-05-17 16:36:18 【问题描述】:我正在使用tar
对服务器进行每日备份,并希望避免备份 /proc 和 /sys 系统目录,但不排除文件树中其他位置名为“proc”或“sys”的任何目录.
例如,具有以下目录树(“bla”是普通文件):
# find
.
./sys
./sys/bla
./foo
./foo/sys
./foo/sys/bla
我想排除 ./sys
但不 ./foo/sys
。
我似乎找不到可以做到这一点的--exclude
模式...
# tar cvf /dev/null * --exclude=sys
foo/
或者...
# tar cvf /dev/null * --exclude=/sys
foo/
foo/sys/
foo/sys/bla
sys/
sys/bla
有什么想法吗? (Linux Debian 6)
【问题讨论】:
你确定没有排除?如果您使用的是 MAC OS,那就另当别论了!看here 不确定我是否理解您的问题。有一个--exclude
选项,但我不知道如何将它匹配为单个绝对文件名(不是该名称的任何文件) - 请参阅上面的示例。
看这里:***.com/questions/984204/…
【参考方案1】:
您可以指定排除模式的绝对路径,这样其他sys
或proc
目录将被归档:
tar --exclude=/sys --exclude=/proc /
【讨论】:
是的,但重要的细节是排除的文件名必须与tar
列表报告的符号完全匹配。对于我的例子,那就是./sys
- 我现在才发现。【参考方案2】:
在这种情况下,您可能希望使用:
--anchored --exclude=sys/\*
因为如果你的 tar 没有显示前导的“/”,你的过滤器就有问题。
【讨论】:
这对我有用,谢谢!我想排除一个特定的目录,而不是所有与模式匹配的目录/子目录。但是 bsdtar 没有“--anchored”选项,使用 bsdtar 我们可以使用完整路径来排除特定文件夹。 啊找到了!在 bsdtar 中,锚点是“^”:bsdtar cvjf test.tar.bz2 --exclude myfile.avi --exclude "^myexcludedfolder" *
【参考方案3】:
使用 tar 你可以通过在任何应该跳过的目录中放置一个标记文件来排除目录。
创建标签文件,
touch /sys/.exclude_from_backup
touch /proc/.exclude_from_backup
那么,
tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup *
【讨论】:
理论上好主意,但通常 /sys 和 /proc 无法写入。以上是关于tar 排除单个文件/目录,而不是模式的主要内容,如果未能解决你的问题,请参考以下文章