提取zip文件内容并动态重命名该目录

时间:2014-11-06 06:01:04

标签: linux bash shell unzip directory-structure

我有一个使用Play Framework创建的应用程序zip文件。它创建名为A-1.0.zip的zip文件。此zip文件包含名称为A-1.0的目录。 (1.0根据版本变化)

我想解压缩zip文件并将文件夹从A-1.0重命名为A.这​​样我的应用程序init.d脚本就会找到启动应用程序的目录。这个shuld可以使用shell脚本动态完成。

有没有办法可以将所有zip文件解压缩到A文件夹而不是解压缩到A-1.0并重命名?请帮忙!

以下是我试过的......

unzip A-1.0.zip -d ~/A

(我知道这样做是非常愚蠢的!)

将文件解压缩到~/A/A-1.0/[contents]

我需要将所有[内容]提取到~/A而不是~/A/A-1.0/。我不知道如何使用命令行.....

我的init.d脚本搜索~/A/bin/A -Dhttp.port=6565 -Dconfig.file=~/A/conf/application.conf以启动播放!应用

要使此脚本正常工作,我将所有脚本全部提取到A-1.0 /然后手动重命名为mv ~/A-1.0 ~/A

3 个答案:

答案 0 :(得分:2)

我没有找到任何特定的解压缩选项来自动执行此操作,但设法通过创建临时符号链接来实现此目标,以便以这种方式人为地重定向提取的文件

ln -s A A-1.0
unzip A-1.0.zip
rm A-1.0

答案 1 :(得分:1)

unzip man page归结为:

unzip A-1.0.zip 'A-1.0/*' -d /the/output/dir
      ^         ^
      |         |
      |         +- files to extract (note the quotes: unzip shall parse the wildcard instd of sh)
      +- The archive

答案 2 :(得分:-1)

编辑:此答案不保留子目录。如果没有或不需要子目录结构,它可以正常工作。

我发现你可以将@géza-török的答案与@ david-c-rankin提到的unzip -j A-1.0.zip 'A-1.0/*' -d /the/output/dir选项结合起来(在问题下方的评论中)。这导致// shrinkResources true // minifyEnabled true 。这只会处理A-1.0 /中的文件并将它们直接输出到给定的输出目录中。

来源:https://linux.die.net/man/1/unzip(看看-j)