【问题标题】:Bash create .tar.gz on SolarisBash 在 Solaris 上创建 .tar.gz
【发布时间】:2013-04-16 19:20:35
【问题描述】:

我正在编写一个 bash 脚本,它应该从指定目录创建一个 .tar.gz 存档,包括文件结构。这是一个家庭作业,我需要它在学校使用的 Solaris 系统上工作。这意味着我不能像这样使用 tar

tar xvzf archive.tar.gz ./

因为这个系统使用了一些没有 -z 选项的旧版本的 tar。我是这样用的

tar xvf - ./ | gzip > archive.tar.gz

除了一个奇怪的事实外,它工作正常,当我检查存档的内容时,它包含自己(换句话说,它包含“archive.tar.gz”)。我怎样才能防止这种情况发生?

【问题讨论】:

  • tar 在 Solaris 上有一个参数 X Exclude. Use the exclude-filename argument as a file containing a list of named files (or direc-tories) to be excluded from the tarfile when using the key letters c, x, or t.。在 /tmp 中创建一个文件,其中包含结果文件的名称。或者在 /tmp 中创建压缩的 tar 文件,如果创建成功则移动它。

标签: bash gzip solaris archive tar


【解决方案1】:

这有效: tar cvf - | gzip > archive.tar.gz

【讨论】:

    【解决方案2】:

    问题是,当您运行命令时,会立即创建名为“archive.tar.gz”的文件。意思是,在调用 gzip 之前。它只是一个空白文件,但它在目录中。为防止将其包含在生成的存档中,您可以尝试通过以下方式之一修改您的脚本:

    1. tar xvf - ./ | gzip > ../archive.tar.gz
    2. tar xvf - {path_to_dir_you_want_to_compress_files_from} | gzip > archive.tar.gz

    遗憾的是,我无法检查其中任何一个脚本是否有效,因为我在任何地方都没有 Solaris。请让我知道这是否有效。

    【讨论】:

    • 第一个不完全符合我的需要。它解决了这个问题,但存档是在“上层”目录中创建的(对不起,不知道那个 xD 的正确词)。第二个效果很好,我想我应该提到这一点,但显然只有当我压缩工作目录并且你的建议不能解决这个问题时才会出现问题(也许我只是不明白)
    • 对我不起作用,需要将 tar xvf 更改为 tar cvf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多