Как извлечь JAR в файловой системе UNIX с помощью одной команды и указать ее целевой каталог с помощью команды JAR?
Я создаю Python script, в котором я выполняю системные команды UNIX. у меня есть
архив войны под названием Binaries.war, который находится в ушном архиве с именем Portal.ear
Файл уха портала Portal находится в, например /home/foo/bar/
jar xf /home/foo/bar/Portal.ear Binaries.war
Извлечет файл Binaries.war из архива /home/foo/bar/Portal.ear в текущий каталог. Я запускаю script из.
Как вы определяете целевой каталог, который нужно извлечь, используя только одну команду?
Я хотел бы сделать что-то подобное, чтобы извлечь Binaries.war в каталог /home/foo/bar/baz
jar xf /home/foo/bar/Portal.ear Binaries.war [into target directory /home/foo/bar/baz]
Я искал справочную страницу JAR для параметров и, похоже, не нашел простой способ сделать это. Конечно, я могу извлечь архив в мой текущий каталог, а затем переместить его с помощью mv, но я хотел бы сделать это одним выстрелом, а не перемешать каталоги и файлы вокруг.
Ответы
Ответ 1
Если ваш файл jar уже имеет абсолютный путь, как показано, это особенно просто:
cd /where/you/want/it; jar xf /path/to/jarfile.jar
То есть у вас есть оболочка, выполненная с помощью каталога изменений Python для вас, а затем запустите извлечение.
Если ваш файл jar еще не имеет абсолютного пути, вам нужно преобразовать относительное имя в абсолютное (путем префикса его с указанием пути к текущему каталогу), чтобы jar
смог найти его после смены каталога.
Единственные проблемы, о которых нужно беспокоиться, - это такие вещи, как пробелы в именах путей.
Ответ 2
Я не думаю, что инструмент jar поддерживает это изначально, но вы можете просто разархивировать JAR файл с помощью "unzip" и указать выходной каталог с параметром "-d", что-то вроде:
$ unzip -d /home/foo/bar/baz /home/foo/bar/Portal.ear Binaries.war
Ответ 3
Нельзя ли изменить рабочий каталог в python script с помощью os.chdir(target)
? Я согласен, я не вижу никакого способа сделать это из самой команды jar.
Если вы не хотите постоянно менять каталог, сохраните текущий каталог (используя os.getcwd()
) в переменной и затем измените его.
Ответ 4
Если это личный script, а не тот, который вы планируете распространять, проще было бы написать для него функцию оболочки:
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-назад немного чище, но я считаю, что я использую небольшие однострочные функции оболочки, подобные этому все время, когда я хочу уменьшить беспорядок кода.