tar创建重命名目录

时间:2011-03-05 20:07:24

标签: tar freebsd

我有一个名为dir的目录,其中包含file1 file2 file3个文件,我想创建一个名为dir.tar.gz的gzipped tar目录,但是层次结构为:

anotherdir/file1
anotherdir/file2
anotherdir/file3

总是可以选择编写一个shell脚本来重命名diranotherdir然后tar它,但我希望有一个更优雅的解决方案。

3 个答案:

答案 0 :(得分:2)

在tarring期间使用符号链接和解除引用。

$ mkdir dir && touch dir/file{1,2,3} && ln -sf dir anotherdir
$ tar -hcvpf a.tar anotherdir
anotherdir/
anotherdir/file1
anotherdir/file2
anotherdir/file3
$ tar -tf a.tar 
anotherdir/
anotherdir/file1
anotherdir/file2
anotherdir/file3

答案 1 :(得分:1)

以下似乎工作正常。 Tar不会关注链接,但是生成的tar会为文件添加额外的./(我觉得这不是什么大问题)。

mkdir dir another_dir && touch dir/file{1,2,3} another_dir/another_file{1,2,3}

tmp_dir=`mktemp -d /tmp/dXXXX` && ln -s `pwd`/dir $tmp_dir/another_dir && 
    tar -C $tmp_dir -cvf result.tar another_dir/. &&
    rm $tmp_dir/another_dir && rmdir $tmp_dir

答案 2 :(得分:0)

您可以制作符号链接,然后强制tar跟随它:

ln -s dir anotherdir
tar -czf dir.tar.gz -L anotherdir

请注意遵循树内的任何符号链接。