我有一个名为dir
的目录,其中包含file1
file2
file3
个文件,我想创建一个名为dir.tar.gz
的gzipped tar目录,但是层次结构为:
anotherdir/file1
anotherdir/file2
anotherdir/file3
总是可以选择编写一个shell脚本来重命名dir
到anotherdir
然后tar它,但我希望有一个更优雅的解决方案。
答案 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
请注意也遵循树内的任何符号链接。