Распаковка архива в единую папку

mktemp был разработан для этого. На странице руководства:

TMPFILE=`mktemp /tmp/example.XXXXXXXXXX` || exit 1
echo "program output" >> $TMPFILE

mktemp создаст файл или выйдет с ненулевым статусом выхода. Логическое или (||) гарантирует, что сценарий завершится, если mktemp не сможет создать файл. После этой команды вы можете быть уверены, что файл доступен. Нет необходимости проверять его снова. Единственное, что вам может потребоваться добавить, это очистку файла в конце вашего скрипта.

И, возможно, также, когда сценарий завершается сигналом. Вам нужно решить, нужно это или нет.

И то, и другое можно сделать с помощью команды trap .

4
11.04.2018, 14:20
3 ответа

7zможет это сделать, по крайней мере, если корневой каталог в архиве (если какой-либо )совпадает с именем каталога, который вы извлекаете в:

7z x -spe funtool.zip -ofuntool

Если все содержимое funtool.zipнаходится внутри каталога funtoolв архиве, 7zне будет дублировать каталог ниже funtool, что даст вам нужный результат.

0
27.01.2020, 21:01

В качестве интерфейса командной строки для различных форматов архивов существует unp, распаковка (почти )всего одной командой .

И он утверждает, что имеет эти опции:

   -u Special helper mode.
      For most archive types:
      - create directory <filename without suffix>/
      - extract contents there
      For Debian/Ubuntu packages:
      - extract data.tar.gz after each operation in local directory
      - extract control.tar.gz into control/<package_version_arch>/
   -U Smart mode, acts like -u (see above) if archive contains multiple
      elements but if there is only one file/directory element then it's stored 
      in the current directory.

И это звучит так, как будто оно близко к поведению, которое вы ищете.

Однако режим -Uпо-прежнему засоряет один файл, если это ZIP с одним файлом, который никоим образом не связан с именем самого zip-файла.

1
27.01.2020, 21:01

Существует инструмент командной строки dtrx , который может извлекать любые сжатые файлы. По умолчанию все будет записано в специальный каталог, названный в честь архива.

Просто запустите

dtrx <archive_name>

Если у вас есть дистрибутив на основе Debian -, вы можете найти его в репозитории APT.

0
27.01.2020, 21:01

Теги

Похожие вопросы