代码之家  ›  专栏  ›  技术社区  ›  Christopher Tokar

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

  •  45
  • Christopher Tokar  · 技术社区  · 17 年前

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

    门户ear文件位于,例如/home/foo/bar中/

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

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

    如何仅使用一个命令指定要提取到的目标目录?

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

    我在JAR手册页上搜索了一些选项,但似乎找不到一个简单的方法。当然,我可以将归档文件提取到我当前的目录中,然后使用mv移动它,但我希望一次就可以完成,而不是随意移动目录和文件。

    4 回复  |  直到 17 年前
        1
  •  72
  •   Jonathan Leffler    17 年前

    如果您的jar文件已具有如图所示的绝对路径名,则特别容易:

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

    也就是说,您可以让Python change directory为您执行shell,然后运行提取。

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

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

        2
  •  64
  •   tddmonkey    17 年前

    $ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war
    
        3
  •  1
  •   Nick Fortescue    17 年前

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

    os.getcwd() )在一个变量中,然后更改回原来的值。

        4
  •  1
  •   Xiong Chiamiov    17 年前

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

    然后您可以从python调用它,如下所示:

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

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

    不过,我将把它作为练习留给读者。

    当然,由于这将首先将.war提取到当前目录中,然后将其移动,因此它有可能覆盖与您所在位置同名的内容。

    更改目录、提取目录和回写cd有点干净,但我发现自己在想减少代码混乱时一直在使用这样的小单行shell函数。