feat(extract): Support .pk{3,4,7} alias file extensions

File extensions .pk3 and .pk4 are renamed zip archives and the file
extension .pk7 is a renamed 7zip file. They can be handled in the same
way as zip and 7zip files.

https://doomwiki.org/wiki/PK3
https://doomwiki.org/wiki/PK4
This commit is contained in:
drjaska 2025-08-08 02:33:15 +03:00
commit 7a0aa439e8
No known key found for this signature in database
3 changed files with 55 additions and 49 deletions

View file

@ -15,7 +15,7 @@ plugins=(... extract)
## Supported file extensions ## Supported file extensions
| Extension | Description | | Extension | Description |
| :---------------- | :----------------------------------- | | :---------------- | :-------------------------------------- |
| `7z` | 7zip file | | `7z` | 7zip file |
| `Z` | Z archive (LZW) | | `Z` | Z archive (LZW) |
| `apk` | Android app file | | `apk` | Android app file |
@ -34,6 +34,9 @@ plugins=(... extract)
| `lz4` | LZ4 archive | | `lz4` | LZ4 archive |
| `lzma` | LZMA archive | | `lzma` | LZMA archive |
| `obscpio` | cpio archive used on OBS | | `obscpio` | cpio archive used on OBS |
| `pk3` | Renamed Zip archive used by Quake games |
| `pk4` | Renamed Zip archive used by Quake games |
| `pk7` | Renamed 7zip file used by Quake games |
| `rar` | WinRAR archive | | `rar` | WinRAR archive |
| `rpm` | RPM package | | `rpm` | RPM package |
| `sublime-package` | Sublime Text package | | `sublime-package` | Sublime Text package |

View file

@ -19,6 +19,9 @@ local -a exts=(
lz4 lz4
lzma lzma
obscpio obscpio
pk3
pk4
pk7
rar rar
rpm rpm
sublime-package sublime-package

View file

@ -76,11 +76,11 @@ EOF
(*.lz4) lz4 -d "$full_path" ;; (*.lz4) lz4 -d "$full_path" ;;
(*.lzma) unlzma "$full_path" ;; (*.lzma) unlzma "$full_path" ;;
(*.z) uncompress "$full_path" ;; (*.z) uncompress "$full_path" ;;
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx) unzip "$full_path" ;; (*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
(*.rar) unrar x -ad "$full_path" ;; (*.rar) unrar x -ad "$full_path" ;;
(*.rpm) (*.rpm)
rpm2cpio "$full_path" | cpio --quiet -id ;; rpm2cpio "$full_path" | cpio --quiet -id ;;
(*.7z | *.7z.[0-9]*) 7za x "$full_path" ;; (*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;
(*.deb) (*.deb)
command mkdir -p "control" "data" command mkdir -p "control" "data"
ar vx "$full_path" > /dev/null ar vx "$full_path" > /dev/null