从tar中排除当前目录

时间:2019-03-08 03:28:07

标签: shell tar

我试图从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.

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

这可以解决问题:

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

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

file