在 Snow Leopard 上创建档案时如何使用 tar -C?

在 Snow Leopard 上创建档案时如何使用 tar -C?

手册页指出

-C directory
      In c and r mode, this changes the directory before adding the following files.

但是,tar 并没有转到我指定的目录,而是报告

tar: <folder name>: Cannot stat: No such file or directory

对于目录中的每个文件夹,我都运行 tar 命令。

我真的需要做这样的事情吗

cd <folder> && tar ... && cd -

或者有办法完成这项工作吗?

答案1

我认为你不能-C在这个问题中使用你所假设的选项。

部分6.10.1 Changing the Working Directory在 GNU 手册中tar描述了-C这样的选项,

要在文件名列表中间更改工作目录,无论是在命令行上还是在使用“--files-from”(“-T”)指定的文件中,请使用“--directory”(“-C”)。这会将工作目录更改为列表中该点之后的指定目录。

‘--directory=directory’
‘-C directory’

在命令行中间更改工作目录。

例如,

$ tar -c -f jams.tar grape prune -C food cherry

会将当前目录中的文件“grape”和“prune”放入档案“jams.tar”,然后是目录“food”中的文件“cherry”。当您有几个相距很远的文件想要存储在同一个档案中时,此选项特别有用。

请注意,文件“cherry”在档案中以精确名称“cherry”记录,而不是“food/cherry”。因此,档案将包含三个文件,它们似乎都来自同一目录;如果使用简单的“tar --extract”提取档案,则所有三个文件都将写入当前目录中。

手册页上还有其他一些示例...


更新:
我通常不会将来自不同路径的文件混合到一个 tar-ball 中。
但是,如果您希望如此,可以做两件事,

  1. 使用-T带有要打包在一起的目录/文件列表的选项。
    这将收集所有内容以及额外的路径前缀。
  2. 使用-h“链接图像”目录上的选项
    (您可以使用脚本创建其中一个目录,以在新的空目录下创建指向感兴趣的文件和目录的链接)在这样的目录上使用的
    选项-h将创建一个代表该目录下文件布局的单个 tar-ball。

答案2

就我个人而言,我更喜欢使用子 shell 来获取柏油进入“位置”。我从未学过这个-C选项,所以不确定它是如何工作的。

假设我的慢性疾病是/路径/a,我想创建一个/路径/b/foo没有领先的/路径/b

user@host:/path/a$ ( cd /path/b && tar czf ~/tarball.tgz foo )
user@host:/path/a$

生成的 tarball 包含目录foo/及其所有内容,但不包括主要内容/路径/b. 子 shell 执行光盘,然后柏油如果光盘成功,然后退出到同一个 CWD 中的原始 shell。

答案3

tar -C 不能使用通配符,因为正如 Henno 在其中一条评论中所述:

* 将根据当前目录由 shell 进行扩展,然后再交给 tar

因此,如果您尝试做类似的事情:

tar -cvzf myfile.tgz -C somepath *

这不起作用。据我所知,你必须先更改目录,就像 quack quixote 建议的那样。

相关内容