如何使用单个命令在UNIX文件系统中提取JAR并使用JAR命令指定目标目录?

我正在创build一个Python脚本,我正在执行UNIX系统命令。 我有一个名为Binaries.war的战争档案,它位于名为Portal.ear的耳朵档案中

Portal ear文件驻留在/ home / foo / bar /

jar xf /home/foo/bar/Portal.ear Binaries.war 

将Binaries.war文件从/home/foo/bar/Portal.ear归档文件中提取到我正在运行脚本的当前目录中。

你如何指定一个目标目录被提取到只使用一个命令? 我想要做这样的事情来提取Binaries.war到/ home / foo / bar / baz目录中

 jar xf /home/foo/bar/Portal.ear Binaries.war [into target directory /home/foo/bar/baz] 

我search了JAR手册页的选项,似乎无法find一个简单的方法来做到这一点。 当然,我可以提取档案到我目前的目录,然后移动它使用mv,但我想这样做一枪,而不是洗牌目录和文件。

如果你的jar文件已经有一个绝对的path名,如下所示:

 cd /where/you/want/it; jar xf /path/to/jarfile.jar 

也就是说,你有Python的更改目录为你执行的shell,然后运行提取。

如果您的jar文件还没有绝对path名,那么您必须将相对名称转换为绝对path(通过将其前缀添加到当前目录的path中),以便jar在更改目录后可以find它。

剩下的唯一问题就是path名称中的空白。

我不认为jar工具支持这个本地,但你可以解压缩与“解压缩”的JAR文件,并指定与“-d”选项的输出目录,所以如下所示:

 $ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war 

你不能只使用os.chdir(target)来改变python脚本中的工作目录吗? 我同意,我无法从jar命令本身看到任何方式。

如果您不想永久更改目录,请将当前目录(使用os.getcwd() )存储在variables中,然后再更改。

如果这是一个个人脚本,而不是你计划分发的脚本,那么编写一个shell函数可能会更简单:

 function warextract { jar xf $1 $2 && mv $2 $3 } 

然后你可以像这样从python调用:

 warextract /home/foo/bar/Portal.ear Binaries.war /home/foo/bar/baz/ 

如果你真的觉得这样,你可以使用sed从path中parsing出文件名,这样你就可以调用它

 warextract /home/foo/bar/Portal.ear /home/foo/bar/baz/Binaries.war 

尽pipe如此,我将把它作为读者的练习。

当然,因为这会将.war提取到当前目录中,然后移动它,所以它有可能在你所在的位置覆盖同名的东西。

改变目录,解压缩,还有一点点清理,但是当我想减less代码混乱的时候,我发现自己一直使用这样的一行shell函数。