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

时间:2009-07-03 14:50:06

标签: java python linux unix jar

我正在创建一个Python脚本,我在其中执行UNIX系统命令。我有一个 名为Binaries.war的war存档,位于名为Portal.ear

的ear存档中

Portal耳朵文件位于/ home / foo / bar /

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

将/home/foo/bar/Portal.ear存档中的Binaries.war文件解压缩到我运行脚本的当前目录中。

如何使用一个命令指定要提取的目标目录? 我想做这样的事情来将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 个答案:

答案 0 :(得分:63)

如果你的jar文件已经有一个如图所示的绝对路径名,那就特别容易:

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

也就是说,您可以通过Python更改目录执行shell,然后运行提取。

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

唯一需要担心的问题是路径名中的空白。

答案 1 :(得分:58)

我认为jar工具本身不支持这种方法,但您只需使用“unzip”解压缩JAR文件,并使用“-d”选项指定输出目录,如下所示:

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

然后你可以从python中调用它:

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

如果您真的喜欢它,可以使用sed从路径中解析文件名,以便您可以使用

调用它
warextract /home/foo/bar/Portal.ear /home/foo/bar/baz/Binaries.war
但是,我会把它留作读者的练习。

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

更改目录,将其解压缩,然后回来更清晰,但是当我想减少代码混乱时,我发现自己一直使用这样的小单行shell函数。