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

61 投票
4 回答
259457 浏览
提问于 2025-04-15 12:40

我正在写一个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]

我查了JAR的手册,找不到简单的方法来做到这一点。当然,我可以先把文件提取到当前目录,然后再用mv命令移动过去,但我希望能一次性完成,不想来回折腾目录和文件。

4 个回答

1

你难道不能在Python脚本里用 os.chdir(target) 来改变工作目录吗?我觉得这样做是可以的,我也看不出有什么方法可以直接通过jar命令来做到这一点。

如果你不想永久性地改变目录,那你可以先用 os.getcwd() 把当前目录存到一个变量里,然后再改回去。

67

我觉得jar工具本身不支持这个功能,不过你可以用“unzip”命令来解压JAR文件,并且可以用“-d”选项指定输出目录。也就是说,你可以这样做:

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

如果你的jar文件已经有了绝对路径,就特别简单了:

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

也就是说,你可以让Python执行的命令行先切换到那个目录,然后再进行提取。

如果你的jar文件没有绝对路径,那你就需要把相对路径转换成绝对路径(也就是在前面加上当前目录的路径),这样在切换目录后,jar才能找到它。

剩下需要注意的就是路径中可能有空格的问题。

撰写回答