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

  • Интернационализация Django (на OSX)
  • Есть ли способ определить, находится ли подкаталог в одной файловой системе из python при использовании os.walk?
  • pip на Mac OS X - PYTHONPATH
  • Нет модуля с именем MySQLdb, даже если MySQL-python установлен?
  • Существуют ли стандартные условные обозначения командной строки для тире и аргументов?
  • Как найти идентификатор пользователя по имени пользователя (Python под * NIX)
  • ImportError: нет модуля с именем simplejson
  • Ubuntu 11.10 + Ошибка Bash + Python + Неверная установка python
  • Перенаправление FORTRAN (вызванного через F2PY) вывода в Python
  • supervisor.sock отказался от подключения в контейнере докера
  • Вызов команды «source» из подпроцесса. Popen
  •  
    Interesting Posts for Van-Lav

    В чем разница между «SAME» и «VALID» дополнением в tf.nn.max_pool тензорного потока?

    Как установить тайм-аут для выполнения запроса

    Сравнение алгоритмов с несколькими вариантами цены для многих клиентов

    Как выполнить эквивалент SQL Join в PyMongo? Или более конкретный вызов объекта коллекции Pymongo в коде BSON?

    Библиотека управления Exif для python

    Использовать механизировать для отправки формы без контрольного имени

    Подача текущего фильтра на другой пользовательский SimpleListFilter в Django

    установка данных с помощью numpy

    Операции, основанные на времени, основанные на векселях, в которых имеет место состояние предшествующих элементов, – соответствуют ли петли?

    Фильтрация по имени ключа объекта в Google App Engine на Python

    Почему объект StringIO медленнее, чем реальный объект?

    Определение Hypernym или Hyponym с помощью wordnet nltk

    Есть ли преимущество в использовании класса Python?

    Парамико закрывает ssh-соединение при исключении непарамико

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

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