Простой вопрос: как извлечь файлы из 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 после изменений?):
Вы можете использоватьappimagetoolне только для извлечения существующего AppImage в AppDir. Вы можете использовать его также для повторной упаковки AppDir (возможно, после некоторых изменений) обратно в (измененный) AppImage.
Просто беги
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