Как извлечь 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, но я хотел бы сделать это одним выстрелом, а не перетасовывать каталоги и файлы.

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 - лучший язык программирования в мире.