如何在解压Zip文件时直接重命名指定目录(一步操作)
可以直接在解压时重命名顶层目录
当然可以!不用单独执行mv命令,有几种简洁的方法能直接实现你的需求:
方法1:用bsdtar(跨平台友好,macOS默认自带,Linux可通过包管理器安装)
bsdtar能直接处理ZIP压缩包,还支持用--transform参数修改解压后的路径。执行这条命令就行:
bsdtar -xf archive.zip --transform 's/^myDir/myRenamedDir/' -C ~/
-xf:-x是解压操作,-f用来指定要处理的压缩包文件--transform 's/^myDir/myRenamedDir/':这是sed风格的替换规则,会把所有以myDir开头的路径替换成myRenamedDir-C ~/:指定把内容解压到你的用户主目录下
跑完这条命令,你直接就能得到~/myRenamedDir/x,完全不用额外的重命名步骤。
方法2:用GNU tar(Linux系统默认自带,需版本1.28及以上)
如果你的Linux系统上的GNU tar版本≥1.28,它也支持直接处理ZIP包,同样用--transform参数实现重命名:
tar --zip -xf archive.zip --transform 's/^myDir/myRenamedDir/' -C ~/
参数含义和上面差不多,--zip是告诉tar这是个ZIP格式的压缩包。
方法3:仅用unzip的变通方案(如果没法用tar工具)
要是你的环境只能用unzip,也有办法:先创建目标目录,再把myDir下的所有内容直接解压到目标目录里:
mkdir -p ~/myRenamedDir && unzip archive.zip myDir/* -d ~/myRenamedDir
mkdir -p:确保目标目录存在,不存在就自动创建unzip archive.zip myDir/*:指定只解压myDir下的所有内容-d ~/myRenamedDir:把这些内容直接放到目标目录中
这种方法对于你这种只有一层目录的场景完全适用,就算myDir下有多层子目录,也能完整保留结构,最终得到~/myRenamedDir/x。
内容的提问来源于stack exchange,提问作者Arcticooling




