2012-03-15 27 views
22

我有一個目錄,例如/var/tmp/my-dir/我經常用下面的命令壓縮:在焦油發生之前重命名目錄名稱

$ cd /var/tmp/ 
$ tar -zcf my-dir.tar.gz my-dir/* 

後來,當我解壓我-dir.tar.gz,它會在當前目錄下創建my-dir/。這聽起來像my-dir目錄是「包裝」在tarball內。是否有tar選項將my-dir重命名爲例如your-dir之前發生實際的油漬。所以...

$ tar -zxf my-dir.tar.gz 
# So that ... this creates your-dir/, instead of my-dir/ 

謝謝。

回答

41

其中tar

GNU Tar接受--transform參數,您可以使用sed表達式來操作文件名。

例如,拆包期間重命名:

tar -zxf my-dir.tar.gz --transform s/my-dir/your-dir/ 

BSD焦油和S焦油類似地具有一個-s參數,以一個簡單的/old/new/(不是一般的sed表達)。

+0

哇,非常感謝你!這就像一個魅力(接受,+1)。 – moey 2012-03-20 22:05:23

+1

@ephemient,我不得不使用--transform ='pattern',例如: sudo tar -xjvf thunderbird-14.0.tar.bz2 --transform ='s/thunderbird \(\/\)/ thunderbird.14 \ 1 /' 與ln -sf thunderbird.14 thunderbird,更新thunderbird不會是一個問題! \ m/ – 2012-07-23 20:08:29

+1

'--transform'在1.2中引入,不幸的是RHEL和CentOS 5.10只有tar v1.15 :( – 2014-06-23 18:28:23

0

對於mac作品-s標誌。

重命名壓縮:

tar -zcf my-dir.tar.gz -s /^my-dir/your-dir/ my-dir/*

重命名提取物:

tar -zxf my-dir.tar.gz -s /^my-dir/your-dir/