我正在创建一个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移动它,但我想一次性执行此操作,而不是随机播放目录和文件。
答案 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函数。