Как извлечь JAR в файловой системе UNIX с помощью одной команды и указать ее целевой каталог с помощью команды JAR?

Я создаю скрипт Python, в котором я выполняю системные команды UNIX. У меня есть военный архив под названием Binaries.war, который находится в ушном архиве с именем 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, но я хотел бы сделать это одним выстрелом, а не перетасовывать каталоги и файлы.

  • Как запустить селен в Xvfb?
  • Найти самый последний файл в каталоге, не прочитав его содержимое
  • Как преобразовать LF в CRLF?
  • Модуль подпроцесса Python возвращает разные результаты из оболочки Unix
  • Как вы устанавливаете свой pythonpath в уже созданном virtualenv?
  • Python: скомпилируйте в приложение командной строки Unix
  • Я уже установил libpng, но есть ошибка «« png.h »file not found #include <png.h>», когда я устанавливаю автозапуск
  • Можете ли вы обмануть isatty AND log stdout и stderr отдельно?
  • 4 Solutions collect form web for “Как извлечь JAR в файловой системе UNIX с помощью одной команды и указать ее целевой каталог с помощью команды JAR?”

    Если ваш файл jar уже имеет абсолютный путь, как показано, это особенно просто:

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

    То есть у вас есть оболочка, выполненная с помощью каталога изменений Python для вас, а затем запустите извлечение.

    Если ваш файл jar еще не имеет абсолютного пути, вам нужно преобразовать относительное имя в абсолютное (путем префикса его с указанием пути к текущему каталогу), чтобы jar смог найти его после смены каталога.

    Единственные проблемы, о которых нужно беспокоиться, – это такие вещи, как пробелы в именах путей.

    Я не думаю, что инструмент jar поддерживает это изначально, но вы можете просто разархивировать JAR-файл с помощью «unzip» и указать выходную директорию с параметром «-d», что-то вроде:

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

    Не можете ли вы просто изменить рабочий каталог в скрипте python с помощью os.chdir(target) ? Я согласен, я не вижу никакого способа сделать это из самой команды jar.

    Если вы не хотите постоянно менять каталог, сохраните текущий каталог (используя os.getcwd() ) в переменной и затем измените его.

    Если это персональный скрипт, а не тот, который вы планируете распространять, проще было бы написать для него функцию оболочки:

     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 в текущий каталог, а затем переместит его, у него есть возможность перезаписать что-то с тем же именем, где вы.

    Изменение каталога, извлечение его и запись cd-назад немного чище, но я нахожу себя использующим небольшие однострочные функции оболочки, подобные этому все время, когда я хочу уменьшить беспорядок кода.

    Python - лучший язык программирования в мире.