【问题标题】:Exclude current directory from tar从 tar 中排除当前目录
【发布时间】:2019-03-09 10:39:16
【问题描述】:

我正在尝试从 tarball 中排除当前目录而不排除其内容,因为当我使用 -k 标志将其提取出来时,我得到退出状态 1 和一条消息

./: Already exists
tar: Error exit delayed from previous errors.

我该怎么做?我已经尝试过 --exclude 标志,但它也排除了内容(正确地如此)。我正在尝试为 OSX/BSD 和 GNU 版本的 tar 编写此代码。

测试用例:

# Setup
mkdir /tmp/stackoverflow
cd /tmp/stackoverflow
mkdir dir 
touch dir/file

# Create
tar cCf dir dir.tar .

# List contents
tar tf dir.tar

给予

./
./file

显示当前目录./ 在tar 中。这很好,但是当我执行以下操作时:

mkdir dir2
tar xkfC dir.tar dir2

由于 -k 标志,我得到退出代码 1 和消息

./: Already exists
tar: Error exit delayed from previous errors.

【问题讨论】:

    标签: shell tar


    【解决方案1】:

    要排除当前目录,您可以通过这种方式创建存档:

    tar cf /path/to/dir.tar ./*
    

    使用./*而不是.,这将与当前目录(.)不匹配,因此不包含在存档中

    【讨论】:

      【解决方案2】:

      这就是诀窍:

      GLOBIGNORE=".:.."
      cd dir
      tar cf ../dir.tar *
      

      额外的cd是替换-C标志的使用,这样我们就可以使用glob了。 GLOBIGNORE 忽略当前目录,但也隐式设置 shopt -s dotglob 以包含隐藏文件。使用* 而不是./* 意味着tar 文件列表没有列出./file,而是将其列为file。 tar 的完整清单是:

      file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多