通过排除其父文件夹为多个目录创建单个 tar 文件

Posted

技术标签:

【中文标题】通过排除其父文件夹为多个目录创建单个 tar 文件【英文标题】:Create a single tar file for multiple directories by excluding its parent folders 【发布时间】:2014-08-14 10:52:16 【问题描述】:

我正在开发一个 bash shell 脚本,该脚本通过将其父文件夹排除到所有目录并排除指定文件夹来为多个文件夹创建一个 tar 文件。

目录结构为:

$ ls dir1
dir11 testdir

$ ls dir2
dir12 testdir2

$ ls dir3
dir13 testdir3

$ tar -cvf file1.tar dir1 dir2 dir3 --exclude="test*"

以上工作正常。

但我不希望 dir1、dir2 和 dir3 文件夹也在 tar 中。我只需要里面的文件和目录。

所以我的最终 tar 应该包含以下内容

$ tar -tvf file1.tar
dir11 dir12 dir13

谁能帮我解决这个问题。提前谢谢

【问题讨论】:

【参考方案1】:

如果我理解正确的问题,您可以使用-C(大写 C = 更改目录)选项,例如:

tar cvf /tmp/some.tar -C /path/to/dir1 . -C /path/to/dir2 .    #multiple -C allowed

检查一下

 tar cf - -C /path/to/dir1 . -C /path/to/dir2 .  | tar tvf -

例子:

创建测试用例

cd /tmp
mkdir test
cd test
mkdir -p dir1..3,testdir
touch dir1/file1..3 dir2/file4..6 dir3/file7..9

树现在是:

$ find . -print
.
./dir1
./dir1/file1
./dir1/file2
./dir1/file3
./dir2
./dir2/file4
./dir2/file5
./dir2/file6
./dir3
./dir3/file7
./dir3/file8
./dir3/file9
./testdir

焦油:

tar cf - -C dir1 . -C ../dir2 . -C ../dir3 . | tar tvf -

tar 内容为:

drwxr-xr-x  0 jm    staff       0 14 aug 13:07 ./
-rw-r--r--  0 jm    staff       0 14 aug 13:07 ./file1
-rw-r--r--  0 jm    staff       0 14 aug 13:07 ./file2
-rw-r--r--  0 jm    staff       0 14 aug 13:07 ./file3
drwxr-xr-x  0 jm    staff       0 14 aug 13:08 ./
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file4
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file5
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file6
drwxr-xr-x  0 jm    staff       0 14 aug 13:08 ./
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file7
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file8
-rw-r--r--  0 jm    staff       0 14 aug 13:10 ./file9

如果您想要其他内容,请编辑您的问题。

【讨论】:

不,我不能做 tar。它抛出错误如下: tar: dir2: 无法统计: 没有这样的文件或目录 tar: dir3: 无法统计: 没有这样的文件或目录 tar: 由于以前的错误而退出失败状态 @user27 每个 chage 目录都是相对于实际目录的.. 参见上面的示例...您应该使用 ../dir2(来自 dir1)或 使用完整路径名 正如我在答案的第一部分所说的那样。 你给出的确切输出就是我需要的 @user27 所以答案是正确的。 ;) 请享用。 (下一次,仔细阅读推荐,阅读手册页也很有用;):)

以上是关于通过排除其父文件夹为多个目录创建单个 tar 文件的主要内容,如果未能解决你的问题,请参考以下文章

创建 .tar.gz 文件时排除目录

tar压缩文件排除文件夹原创

linux的tar命令详情;linux多个文件压缩打包到一个压缩文件

创建 tar 存档时 phar 排除目录

使用 tar 时排除目录

tar打包命令