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