2011-03-05 71 views
2

我有一個名爲dir與文件file1file2file3在裏面,我想創建一個gzip壓縮的tar目錄從它叫做dir.tar.gz但與層次結構目錄:焦油創建重命名目錄

anotherdir/file1 
anotherdir/file2 
anotherdir/file3 

總是有選擇編寫一個shell腳本,將dir重命名爲anotherdir,然後打開它,但我希望有一個更優雅的解決方案。

回答

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 
+0

問題是我的設置不典型,目錄anotherdir已經存在。沒有其他辦法嗎? – kaykun 2011-03-05 20:23:48

+0

'anotherdir'可以在任何目錄下。首先cd到/ tmp,然後創建符號鏈接。 – kojiro 2011-03-05 20:25:41

0

你可以做一個符號鏈接,然後強制tar遵循它:

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

小心將遵循樹內的任何符號鏈接。

1

以下似乎工作正常。焦油不會跟隨鏈接,但結果焦油將有額外的./爲文件(我認爲這不是一個大問題)。

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