Подтвердить что ты не робот

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

4b9b3361

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