【问题标题】:Tar Directory Contents Without Creating A Root Folder In Archivetar 目录内容而不在存档中创建根文件夹
【发布时间】:2012-11-08 09:05:00
【问题描述】:

我在文件夹中的 bash 脚本中运行以下 sn-p。这会创建一个没有根文件夹的存档,因为我在要存档其内容的文件夹中运行脚本。

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) *

Archive Contents:
/a/
/b/
/c/
/a_normal_file

效果很好,但是由于我使用的是 *,所以它不会在直接目录中归档隐藏文件。我做了一些搜索,发现archiving (ubuntu tar) hidden directories然后我将其更改为:

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) .

Archive Contents:
/./a/
/./b/
/./c/
/./.a_hidden_file
/./a_normal_file

仍然有效,但现在正在创建一个名为“。”的根文件夹。特点。内容就在其中。如何获得我之前的结果,但它仍然在直接目录中存档隐藏文件?

提前致谢!

【问题讨论】:

    标签: bash tar hidden-files


    【解决方案1】:

    使用-C, --directory DIR

    --directory=$(dirname ${0})
    

    例子:

    $ ls -a xxx
    .  ..  aaa  .bbb
    $ tar cvf test.tar --exclude test.tar -C xxx .
    ./
    ./.bbb
    ./aaa
    

    【讨论】:

    • 一些解释将有助于这个答案
    • 我编辑了答案并添加了一个示例。 “-C”参数在列出要归档的文件之前更改当前工作目录(因此文件具有相对路径)。 "$(dirname ${0})" 是运行脚本的目录(我认为作者想在该目录中存档文件)。
    【解决方案2】:

    虽然它不影响存档的解包(因为. 只是指同一个目录),如果它困扰您,您可以将通配符从* 更改为.[^.]* * 以包括所有隐藏的文件。

    此外,如果您有以.. 开头的隐藏文件,例如..a,您还需要将..?* 添加到列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 2017-04-20
      • 2020-05-22
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多