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

问题描述 投票:0回答:3

我有一个目录,例如

/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
重命名为例如
your-dir
实际涂焦油发生之前。这样...

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

谢谢。

bash shell command-line tar
3个回答
95
投票

哪个

tar

GNU Tar 接受

--transform
参数,您可以为其提供
sed
表达式来操作文件名。

例如解包时重命名:

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

BSD tar 和 Star 同样有一个

-s
参数,采用简单的
/old/new/
(不是一般的
sed
表达式)。


19
投票

适用于 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/


14
投票

参加聚会迟到了,但这是我经过时间验证的方法。当我有一个 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 风格的解决方案优雅,但我认为这种方法确实有一些优点。

© www.soinside.com 2019 - 2024. All rights reserved.