在tar发生之前重命名目录名称

时间:2012-03-15 23:34:57

标签: bash shell command-line tar

我有一个目录,例如我经常使用以下命令压缩的/var/tmp/my-dir/

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

稍后,当我解开 my-dir.tar.gz 时,它会在当前目录中创建my-dir/。听起来像my-dir目录被“包裹”在tarball中。是否有 tar 选项可将my-dir重命名为例如 之前 实际的tar化发生。所以...

your-dir

感谢。

3 个答案:

答案 0 :(得分:56)

哪个tar

GNU Tar接受--transform参数,您可以使用sed表达式来操作文件名。

例如,要在解包期间重命名:

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

BSD tar和S tar类似地有一个-s参数,采用简单的/old/new/(不是一般的sed表达式。)

答案 1 :(得分:7)

对于mac works thenCompose标记。

压缩时重命名:

-s

重新命名提取:

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

答案 2 :(得分:2)

参加聚会迟到了,但这是我久经考验的方法。当我有一个 tar 文件提取到我不喜欢的顶级目录名称时,我通过创建我喜欢的目录名称然后将 tar 与 -C--strip-component 选项一起使用来解决它。

mkdir your-dir && tar -zxvf my-dir.tar.gz -C your-dir --strip-components=1

-C 就像在您指定的目录中一样提取,而 --strip-component 表示忽略存储在 tarfile 内容中的第一级。

乍一看,这种方法可能不如其他人给出的 sed 风格的解决方案优雅,但我认为这种方法确实有一些优点。