How do you extract a JAR in a UNIX filesystem with a single command and specify its target directory using the JAR command?

前端 未结 4 643
囚心锁ツ
囚心锁ツ 2020-12-23 16:34

I am creating a Python script within which I am executing UNIX system commands. I have a war archive named Binaries.war which is within an ear archive named Portal.ear

相关标签:
4条回答
  • 2020-12-23 16:52

    I don't think the jar tool supports this natively, but you can just unzip a JAR file with "unzip" and specify the output directory with that with the "-d" option, so something like:

    $ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war
    
    0 讨论(0)
  • 2020-12-23 16:58

    If this is a personal script, rather than one you're planning on distributing, it might be simpler to write a shell function for this:

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

    which you could then call from python like so:

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

    If you really feel like it, you could use sed to parse out the filename from the path, so that you'd be able to call it with

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

    I'll leave that as an excercise to the reader, though.

    Of course, since this will extract the .war out into the current directory first, and then move it, it has the possibility of overwriting something with the same name where you are.

    Changing directory, extracting it, and cd-ing back is a bit cleaner, but I find myself using little one-line shell functions like this all the time when I want to reduce code clutter.

    0 讨论(0)
  • 2020-12-23 17:03

    Can't you just change working directory within the python script using os.chdir(target)? I agree, I can't see any way of doing it from the jar command itself.

    If you don't want to permanently change directory, then store the current directory (using os.getcwd())in a variable and change back afterwards.

    0 讨论(0)
  • 2020-12-23 17:11

    If your jar file already has an absolute pathname as shown, it is particularly easy:

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

    That is, you have the shell executed by Python change directory for you and then run the extraction.

    If your jar file does not already have an absolute pathname, then you have to convert the relative name to absolute (by prefixing it with the path of the current directory) so that jar can find it after the change of directory.

    The only issues left to worry about are things like blanks in the path names.

    0 讨论(0)
提交回复
热议问题