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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9729793/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 21:47:37  来源:igfitidea点击:

Rename Directory Name Before tar Happens

bashshellcommand-linetar

提问by moey

I have a directory e.g. /var/tmp/my-dir/that I frequently compress with the following command:

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

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

Later, when I untar my-dir.tar.gz, it'll create my-dir/in the current directory. It sounds like the my-dirdirectory is "wrapped" inside the tarball. Is there a taroption to rename my-dirto e.g. your-dirbeforethe actual tarring happens. So that ...

稍后,当我解压my-dir.tar.gz 时,它将my-dir/在当前目录中创建。听起来该my-dir目录被“包装”在 tarball 中。是否有一个tar选项可以在实际 tarring 发生之前重命名my-dir为。以便 ...your-dir

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

Thanks.

谢谢。

回答by ephemient

Which tar?

哪个tar

GNU Taraccepts a --transformargument, to which you give a sedexpression to manipulate filenames.

GNU Tar接受一个--transform参数,您可以为其提供一个sed表达式来操作文件名。

For example, to rename during unpacking:

例如,在解包过程中重命名:

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

BSD tar and S tar similarly have an -sargument, taking a simple /old/new/(not a general sedexpression).

BSD tar 和S tar 同样有一个-s参数,取一个简单的/old/new/(不是一般的sed表达)。

回答by DamneD

For mac works -sflag.

对于 mac 作品-s标志。

Rename on compress:

压缩时重命名:

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

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

Rename on extract:

在提取时重命名:

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

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