将排除目录中的子目录包含在 tar 存档中

将排除目录中的子目录包含在 tar 存档中

我有根文件夹USA和子文件夹California以及Texas.Texas是一个排除的子文件夹,但其中有一个我想包含在 tar 备份中的特定文件。我们称这个文件为Austin

我该怎么做呢?

答案1

顺序很重要。无需运行 tar 两次。

tar cvf dest.tar USA/Texas/Austin --exclude=USA/Texas USA

在 GNU tar 1.29 上测试

答案2

运行 tar 两次?首先排除德克萨斯州,然后提取文件?

答案3

我不知道如何使用 BSD 或 GNU tar 方便地做到这一点。 (不方便的是:不要排除目录本身,而是排除目录中除您要包含的文件之外的每个文件。)

你可以相对轻松地做到这一点帕克斯,它是 POSIX 的 cpio 和 tar 的替代品。 Pax 应该随处可用,尽管某些 Linux 发行版并未将其作为默认安装的一部分。

Pax 通过同一工具管理排除和重命名:选项-s。如果文件被重命名为空字符串,则会将其排除。选项-s按顺序处理,一旦文件匹配,就不会处理该文件的后续选项(除非g使用后缀)。因此,您可以通过在与其匹配的排除规则之前将其重命名为自身来取消排除文件。

pax -w >foo.tar -s '!^USA/Texas/Austin$!&!' -s'!^USA/Texas/.*!!' USA 

答案4

您可以尝试组合tarfind命令来执行此操作,如下所示:

tar cf USA.tar $(find USA/* -type d ! -path "*Texas*" -o -path "USA/Texas/Austin")

相关内容