Как извлечь файлы из AppImage?

Как извлечь файлы из AppImage?

Простой вопрос: как извлечь файлы из AppImage?

Графический интерфейс, командная строка — неважно, главное, чтобы он выполнял свою работу.

Я использую openSUSE Tumbleweed, если это имеет значение.

решение1

Первый, проверьте, использует ли ваш файл AppImage новейшую версию своего внутреннего формата:

/path/to/your.AppImage --appimage-help

Если вы видите следующую строку в выводе:

--appimage-extract              Extract content from embedded filesystem image

вы можете сделать вывод сами, как действовать. В этом случае у вас есть (новее)тип 2Формат AppImage перед вами. (Часть команды «путь» может быть относительной или абсолютной.)

Второй, если первая команда не сработала, вы можете использовать вспомогательный инструмент. Однако для этого вам понадобятся привилегии sudo/root:скачатьappimagetool(который, конечно, доступен как AppImage). Сделайте его исполняемым и запустите:

/path/to/appimagetool-x86_64.AppImage --list /path/to/your.AppImage

Это должно дать вам список всех файлов и их (относительных) путей, встроенных вваш.AppImage. Извлекатьваш.AppImageв каталог с именем и расположением по адресу/путь/к/некоторому_директору, бегать

mkdir /path/to/somedir
/path/to/appimagetool-x86_64.AppImage /path/to/your.AppImage /path/to/somedir

Третий, вы можете монтировать AppImages (как типа 1, так и типа 2) без вспомогательного инструмента:

  • Тип 1:

    mkdir mountpoint
    sudo mount -o loop my.AppImage mountpoint/
    
    # You can now inspect the contents
    # You can now also copy the contents to a writable location of your hard disk
    
    sudo umount mountpoint/
    # Do not forget the umount step!
    # If you do forget it, your system may exhibit unwanted behavior.
    
  • Тип 2:

    mkdir mountpoint
    my.AppImage --appimage-offset
    123456   # This is just an example output
    
    sudo mount my.AppImage mountpoint/ -o offset=123456
    
    # you can now inspect the contents
    
    sudo umount mountpoint/
    # Do not forget the umount step!
    # If you do forget it, your system may exhibit unwanted behavior.
    

Подсказка для «параноиков»:Если вы не хотите доверять AppImage, третий метод предпочтительнее. Поскольку запуск (для AppImages типа 2) the.AppImage --appimage-extractили the.AppImage --appimage-mountили the.AppImage --appimage-offsetозначает, что вы фактически выполняете AppImage (но не его содержимое).

Обновлять:

Чтобы ответить на вопрос @jayarjo в комментарии ниже (как переупаковать AppImage после изменений?):

  1. Вы можете использоватьappimagetoolне только для извлечения существующего AppImage в AppDir. Вы можете использовать его также для повторной упаковки AppDir (возможно, после некоторых изменений) обратно в (измененный) AppImage.

  2. Просто беги

     appimagetool -v /path/to/AppDir
    

    Посмотрите вывод команды (сделан подробным с помощью-v) для расположения и имени вновь созданного AppImage. Вот и все.

решение2

переименовать расширение в .7z

$ mv file.AppImage file.7z

извлечь с помощью файл-роллера

$ file-roller --extract-here file.7z 

Протестировано на Linux Mint.

решение3

Я переименовываю только правой кнопкой мыши, например:

сжать-pdf-v0.1-x86_64.AppImage

к:

сжать-pdf-v0.1-x86_64.zip

затем щелкните правой кнопкой мыши

"Извлечь сюда"

и работаю

извлечь все файлы в одну папку

решение4

На основе ответа здесь я создал этот простой скрипт bash. Но я никогда не сталкивался с AppImage, который я мог бы извлечь с помощью циклического устройства. EDIT: Только что сделал: "wxHexEditor"

Здесь:

#!/bin/bash

APP="$2"
UNPK="$(echo $APP | sed 's/\.AppImage//')"

case "$1" in
  -a)
      chmod +x $APP;
      ./$APP --appimage-extract
      mv squashfs-root $UNPK
      ;;
  -b)
      mkdir -p /tmp/$UNPK
      sudo mount -o loop $APP /tmp/$UNPK &>/dev/null
      mkdir -p ~/Desktop/$UNPK
      cp -R /tmp/$UNPK/* ~/Desktop/$UNPK &>/dev/null
      sudo umount /tmp/$UNPK
      ;;
  *)
      echo
      echo "   Usage: appunpack [option] AppImageFile"
      echo 
      echo "   Options: -a  Unpack using --appimage-extract"
      echo "            -b  Unpack using a loop device"
      ;;
esac

Связанный контент