Simple question, how can I extract files from an AppImage?
GUI, CLI, it doesn't matter, as long as it gets the job done.
I'm using openSUSE Tumbleweed if it matters
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.Sign up to join this community
First, look if your AppImage file is using the newest version of its internal format:
If you see the following line in the output:
--appimage-extract Extract content from embedded filesystem image
you can conclude yourself how to proceed. In this case you have a (newer) type 2 AppImage format in front of you. (The 'path' part of the command may be relative or absolute.)
Second, if the first command didn't work, you can use a helper tool. However, you need sudo/root privileges for this: download
appimagetool (which off course is available as an AppImage). Make it executable and run:
/path/to/appimagetool-x86_64.AppImage --list /path/to/your.AppImage
This should give you a list of all files and their (relative) paths embedded in your.AppImage. To extract your.AppImage into a directory named and located at /path/to/somedir , run
mkdir /path/to/somedir /path/to/appimagetool-x86_64.AppImage /path/to/your.AppImage /path/to/somedir
Third, you can mount AppImages (type 1 as well as type 2) without the helper tool too:
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.
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.
Hint for the 'paranoid': If you do not want to trust the AppImage, the third method is preferable. Because running (for type 2 AppImages)
the.AppImage --appimage-extract or
the.AppImage --appimage-mount or
the.AppImage --appimage-offset means you are actually executing an AppImage (though not its content).
To answer the question of @jayarjo in the comment below (how to re-package the AppImage after modifications?):
You can use appimagetool not just to extract an existing AppImage into an AppDir. You can use it to also re-package the AppDir (possibly after some changes) back into a (modified) AppImage.
appimagetool -v /path/to/AppDir
Watch output of command (made verbose by
-v) for the location and name of the newly created AppImage. That's it.
Based on the answer here, I've create this simple bash script. But I've never encounter an AppImage that I could extract with a loop device. EDIT: Just did: "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