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

Я создаю python сценарий, в котором я выполняю команды системы UNIX. У меня естьЯ хотел бы сделать что-то вроде этого, чтобы извлечь Binaries.war в каталог / дом / foo/bar/baz

jar xf /home/foo/bar/Portal.ear Binaries.war [into target directory /home/foo/bar/baz]

Я искал НАР человек странице вариантов и не могу найти простой способ сделать это. Конечно, я могу извлечь архив в мой текущий каталог, а затем переместить его с помощью MV, но я хотел бы сделать это в один выстрел, а не перетасовывать каталоги и файлы вокруг.

военный архив под названием Binaries.war, который находится в ухо архив под названием Portal.ear

Портал ухо файл находится в, скажем , / дома / Foo / бар /

jar xf /home/foo/bar/Portal.ear Binaries.war

Будет извлечь Binaries.war файл из / дома / Foo / Бар / Portal.ear архив в текущем каталоге я бегу сценарий из.

Как указать целевой каталог, который будет извлечен для использования только одной команды?

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

Количество ответов:4

Я не думаю, что банку инструмент поддерживает это родной, но вы можете просто распаковать файл JAR с "unzip" и указать выход каталога с этим с "-D" вариант, так что-то вроде:

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

Вы не можете просто изменить рабочий каталог в питон сценарий с помощью os.chdir(target) ? I agree, I can't see any way of doing it from the jar command itself. ? Я согласен, я не вижу никакого способа сделать это из банки команды себя.

Если вы не хотите постоянно менять каталог, то храните текущий каталог (с использованием os.getcwd())in a variable and change back afterwards.) в переменной и меняйтесь обратно после этого.

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

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

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

Если ваш файл банка еще не имеет абсолютного имени пути, то вы должны преобразовать относительное имя в абсолютное (зафиксирование его с пути текущего каталога), так что jar can find it after the change of directory. можно найти его после смены каталога.

Единственные вопросы, оставшиеся беспокоиться о вещи, как пробелы в названиях пути.

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

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

, который вы могли бы позвонить от питона, как это:

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