主要使用7zip、libarchive和Python标准库进行可靠归档提取的通用归档提取器。
项目描述
许可证:Apache-2.0
版权:版权所有 (c) nexB. Inc. 及其他
关键词:存档、提取、libarchive、7zip、scancode-toolkit、extractcode
支持Windows、Linux和macOS的64位处理器,以及Python 3.6到3.9。
ExtractCode是一个(主要)通用存档提取器。
使用以下方式安装
pip install extractcode[full]
为什么还需要另一个提取器?
它会提取!
ExtractCode可以在其他存档和压缩文件提取器可能失败的地方提取内容。
ExtractCode支持本文件底部支持的存档格式列表中列出的最大数量的存档格式之一。
比如说,你想要在Windows上提取Linux内核源代码的tar包。它包含在忽略大小写时相同的路径,因此无法在Windows上正常提取:某些文件可能被损坏或提取失败。
或者,tar包(在任何操作系统上)可能包含多次完全相同的路径。在这种情况下,在存档中先出现的路径可能被“隐藏”,并被存档中后来出现的相同路径覆盖,给人一种只有一个文件的感觉。
或者,存档可能损坏了一点点,但大多数文件仍然可以提取。
或者,提取的文件权限是您无法读取的,并且不属于您。
或者,存档可能包含奇怪的路径,包括可能难以提取的相对路径。
或者,存档可能包含特殊类型的文件(字符/设备文件),这些文件可能难以提取。
或者,存档可能是一个虚拟磁盘或某些文件系统镜像,通常需要挂载才能访问,可能需要root权限和猜测来确定哪个分区和文件系统正在运行以及使用哪个驱动器。
在这些所有情况下,ExtractCode都会提取并尽力做到正确的事情,以获取实际的存档内容,而其他工具可能失败。
它还可以递归地提取任何类型的(嵌套)存档中的存档。
作为缺点,提取的内容可能不是典型的包含文件的使用情况所提取的内容:例如,某些文件可能被重命名,特殊文件和符号链接将被跳过,权限和所有者将被更改,但这对于主要用例,即文件内容分析用于软件组成或法医分析,是可行的。
幕后,ExtractCode使用了多个工具,例如
Python标准库,
一个定制的ctypes绑定到libarchive,
7zip命令行工具,
以及在Linux上可选的libguestfs。
有了这些,它可以提取大量常见和不常见的存档和压缩文件类型。ExtractCode试图在所有支持的操作系统上以相同的方式提取内容,包括自动重命名在特定文件系统上或当给定存档中存在多个相同路径时(这在tar中是可能的)无法提取的无效文件名。
提取操作由一个考虑文件扩展名、文件名、文件类型和MIME类型的“投票”系统驱动(使用 ctypes 绑定到 libmagic)。它可以处理多级归档,如 tar.gz,并且可以递归地提取任何嵌套的归档。
访问https://aboutcode.org和https://github.com/nexB/以获取支持和下载。
我们在
安装
要使用完整的安装包(其中安装了 7zip 和 libarchive 的二进制文件),请使用 full 额外选项
pip install extractcode[full]
如果您想使用操作系统提供的可能版本的二进制文件,请使用 minimal 选项
pip install extractcode
在这种情况下,您需要提供以下方式之一中安装和配置的、正常工作和兼容的 libarchive 和 7zip,以便 ExtractCode 可以找到它们
一个 typecode-libarchive 和 typecode-7z 插件:请参阅标准插件https://github.com/nexB/scancode-plugins/tree/main/builtins 这些插件可以打包 libarchive 库、7z 可执行文件或公开系统安装的库。它通过提供 scancode_location_provider 作为 extractcode_libarchive 的插件入口点来实现,它应指向一个具有 get_locations() 方法的 LocationProviderPlugin 子类,该方法必须返回一个包含此键的映射
‘extractcode.libarchive.dll’:指向 libarchive 共享对象/DLL 的绝对路径
例如
同样,scancode_location_provider 的 extractcode_7zip 应指向一个具有 get_locations() 方法的 LocationProviderPlugin 子类,该方法必须返回一个包含此键的映射
‘extractcode.sevenzip.exe’:指向 7zip 可执行文件的绝对路径
例如
使用 环境变量 指向已安装的二进制文件
EXTRACTCODE_LIBARCHIVE_PATH:指向 libarchive DLL 的绝对路径
EXTRACTCODE_7Z_PATH:指向 7zip 可执行文件的绝对路径
系统 PATH 中可用的系统安装的 libarchive 和 7zip 可执行文件。
支持的二进制工具版本是
libarchive 3.5.x
7zip 16.5.x
开发
为了设置开发环境
./configure --dev source venv/bin/activate
为了运行单元测试
pytest -vvs -n 2
为了清理开发环境
./configure --clean
为了在激活的环境中运行命令行工具
./extractcode -h
使用环境变量进行配置
如果设置了,ExtractCode 将使用以下环境变量
EXTRACTCODE_LIBARCHIVE_PATH:指向支持某些归档格式的 libarchive.so libarchive 共享库的路径。如果没有提供,ExtractCode 将尝试使用标准 DLL 加载技术在其路径中查找插件提供的 libarchive 库路径。有关此类插件的示例,请参阅https://github.com/nexB/scancode-plugins/tree/main/builtins。如果没有插件提供 libarchive,则尝试使用标准 DLL 加载技术在路径中查找它。
EXTRACTCODE_7Z_PATH:用于支持某些归档格式的7zip可执行文件路径。如果未提供,ExtractCode将寻找插件提供的7z可执行文件路径。有关此类插件,请参阅https://github.com/nexB/scancode-plugins/tree/main/builtins。如果没有插件提供7z,则最后尝试在PATH中查找。
EXTRACTCODE_GUESTFISH_PATH:用于从libguestfs提取VM镜像的guestfish工具路径。如果未提供,ExtractCode将在PATH中查找已安装的guestfish可执行文件。
添加对VM镜像提取的支持
添加对VM镜像的支持需要手动安装libguestfs-tools系统包。这仅在Linux上受支持。在Debian和Ubuntu上,您可以使用以下命令:
sudo apt-get install libguestfs-tools
在Ubuntu上,还需要一个额外的手动步骤,因为内核可执行文件不能由libguestfish要求的用户读取。
运行此命令作为临时和即时的修复
sudo chmod 0644 /boot/vmlinuz-* for k in /boot/vmlinuz-* do sudo dpkg-statoverride --add --update root root 0644 /boot/vmlinuz-$k done
您可能希望同时进行这个临时修复和一个更持久的修复;否则,每次内核更新都会恢复到默认权限,并且ExtractCode将停止为VM镜像提取工作。
因此,请按照以下说明操作:
1. 以sudo权限创建文件/etc/kernel/postinst.d/statoverride,内容如下,由Kees Cook (@kees) 在https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/3中设计
#!/bin/sh version="$1" # passing the kernel version is required [ -z "${version}" ] && exit 0 dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}
设置可执行权限
sudo chmod +x /etc/kernel/postinst.d/statoverride
另请参阅以下链接以获取完整讨论
替代方案
这些其他工具与此相关,并在创建ExtractCode之前考虑过
这些工具提供内置、原始的提取功能
https://libarchive.org/(集成在ExtractCode中)(BSD许可证)
https://www.7-zip.org/(集成在ExtractCode中)(LGPL许可证)
https://theunarchiver.com/command-line(维护状态未知)(LGPL许可证)
这些工具是其他提取工具的命令行工具包装,与ExtractCode类似,但目标不同
https://github.com/wummel/patool(许多CLI工具的包装器)(GPL许可证)
https://github.com/dtrx-py/dtrx(一些CLI工具的包装器)(最近恢复)(GPL许可证)
支持的归档格式列表
ExtractCode可以提取以下归档格式
归档格式类型:文档
- 名称:办公文档
扩展名:.docx、.dotx、.docm、.xlsx、.xltx、.xlsm、.xltm、.pptx、.ppsx、.potx、.pptm、.potm、.ppsm、.odt、.odf、.sxw、.stw、.ods、.ots、.sxc、.stc、.odp、.otp、.odg、.otg、.sxi、.sti、.sxd、.sxg、.std、.sdc、.sda、.sdd、.smf、.sdw、.sxm、.stw、.oxt、.sldx、.epub
文件类型:zip归档、Microsoft Word 2007+、Microsoft Excel 2007+、Microsoft PowerPoint 2007+
MIME类型:application/zip,application/vnd.openxmlformats
- 名称:Dia图表文档
扩展名:.dia
文件类型:gzip压缩
MIME类型:application/gzip
- 名称:Graffle图表文档
扩展名:.graffle
文件类型:gzip压缩
MIME类型:application/gzip
- 名称:SVG压缩文档
扩展名:.svgz
文件类型:gzip压缩
MIME类型:application/gzip
归档格式类型:常规
- 名称:Tar
扩展名:.tar
文件类型:.tar、tar归档
MIME类型:application/x-tar
- 名称:Zip
扩展名:.zip、.zipx
文件类型:zip归档
MIME类型:application/zip
- 名称:Java归档
扩展名:.war、.sar、.ear
文件类型:zip归档
MIME类型:application/zip,application/java-archive
- 名称:xz
扩展名:.xz
文件类型:xz压缩
类型:application/x-xz
- 名称:lzma
扩展名:.lzma
文件类型:lzma压缩
类型:application/x-xz
- 名称:Gzip
扩展名:.gz, .gzip, .wmz, .arz
文件类型:gzip压缩,gzip压缩数据
MIME类型:application/gzip
- 名称:bzip2
扩展名:.bz, .bz2, bzip2
文件类型:bzip2压缩
类型:application/x-bzip2
- 名称:lzip
扩展名:.lzip
文件类型:lzip压缩
类型:application/x-lzip
- 名称:RAR
扩展名:.rar
文件类型:rar存档
类型:application/x-rar
- 名称:ar存档
扩展名:.ar
文件类型:当前ar存档
类型:application/x-archive
- 名称:7zip
扩展名:.7z
文件类型:7-zip存档
类型:application/x-7z-compressed
- 名称:cpio
扩展名:.cpio
文件类型:cpio存档
类型:application/x-cpio
- 名称:Z
扩展名:.z
文件类型:压缩数据
类型:application/x-compress
存档格式类型:常规嵌套
- 名称:Tar xz
扩展名:.tar.xz, .txz, .tarxz
文件类型:xz压缩
类型:application/x-xz
- 名称:Tar lzma
扩展名:tar.lzma, .tlz, .tarlz, .tarlzma
文件类型:lzma压缩
类型:application/x-lzma
- 名称:Tar gzip
扩展名:.tgz, .tar.gz, .tar.gzip, .targz, .targzip, .tgzip
文件类型:gzip压缩
MIME类型:application/gzip
- 名称:Tar lzip
扩展名:.tar.lz, .tar.lzip
文件类型:lzip压缩
类型:application/x-lzip
- 名称:Tar lz4
扩展名:.tar.lz4
文件类型:lz4压缩
类型:application/x-lz4
- 名称:Tar zstd
扩展名:.tar.zst, .tar.zstd
文件类型:zstandard压缩
类型:application/x-zstd
- 名称:Tar bzip2
扩展名:.tar.bz2, .tar.bz, .tar.bzip, .tar.bzip2, .tbz, .tbz2, .tb2, .tarbz2
文件类型:bzip2压缩
类型:application/x-bzip2
- 名称:lz4
扩展名:.lz4
文件类型:lz4压缩
类型:application/x-lz4
- 名称:zstd
扩展名:.zst, .zstd
文件类型:zstandard压缩
类型:application/x-zstd
- 名称:Tar 7zip
扩展名:.tar.7z, .tar.7zip, .t7z
文件类型:7-zip存档
类型:application/x-7z-compressed
- 名称:Tar Z
扩展名:.tz, .tar.z, .tarz
文件类型:压缩数据
类型:application/x-compress
存档格式类型:包
- 名称:Ruby Gem包
扩展名:.gem
文件类型:.tar、tar归档
MIME类型:application/x-tar
- 名称:Android应用
扩展名:.apk
文件类型:zip归档
MIME类型:application/zip
- 名称:Android库
扩展名:.aar
文件类型:zip归档
MIME类型:application/zip
- 名称:Mozilla扩展
扩展名:.xpi
文件类型:zip归档
MIME类型:application/zip
- 名称:iOS应用
扩展名:.ipa
文件类型:zip归档
MIME类型:application/zip
- 名称:Springboot Java Jar包
扩展名:.jar
文件类型:Bourne-again shell脚本可执行文件(二进制数据)
类型:text/x-shellscript
- 名称:Java Jar包
扩展名:.jar, .zip
文件类型:Java存档
类型:application/java-archive
- 名称:Java Jar包
扩展名:.jar
文件类型:zip归档
MIME类型:application/zip
- 名称:Python包
扩展名:.egg, .whl, .pyz, .pex
文件类型:zip归档
MIME类型:application/zip
- 名称:Microsoft cab
扩展名:.cab
文件类型:microsoft cabinet
类型:application/vnd.ms-cab-compressed
- 名称:Microsoft MSI安装程序
扩展名:.msi
文件类型:msi安装程序
类型:application/x-msi
- 名称:Apple pkg或mpkg包安装程序
扩展名:.pkg, .mpkg
文件类型:xar存档
类型:application/octet-stream
- 名称:Xar存档 v1
扩展名:.xar
文件类型:xar存档
类型:application/octet-stream, application/x-xar
- 名称:Nuget
扩展名:.nupkg
文件类型:zip存档,microsoft ooxml
类型:application/zip, application/octet-stream
- 名称:静态库
扩展名:.a, .lib, .out, .ka
文件类型:当前ar存档,当前ar存档随机库
类型:application/x-archive
- 名称:Debian包
扩展名:.deb, .udeb
文件类型:Debian二进制包
类型:application/vnd.debian.binary-package, application/x-archive
- 名称:RPM包
扩展名:.rpm, .srpm, .mvl, .vip
文件类型:rpm
类型:application/x-rpm
- 名称:Apple dmg
扩展名:.dmg, .sparseimage
文件类型:zlib压缩
类型:application/zlib
存档格式类型:文件系统
- 名称:ISO CD镜像
扩展名:.iso, .udf, .img
文件类型:iso 9660 CD-ROM,High Sierra CD-ROM
MIME类型:application/x-iso9660-image
- 名称:SquashFS 磁盘镜像
扩展名
文件类型:squashfs
MIME类型
- 名称:QEMU QCOW2 磁盘镜像
扩展名:.qcow2, .qcow, .qcow2c, .img
文件类型:qemu qcow2 镜像,qemu qcow 镜像
类型:application/octet-stream
- 名称:VMDK 磁盘镜像
扩展名:.vmdk
文件类型:vmware4 磁盘镜像
类型:application/octet-stream
- 名称:VirtualBox 磁盘镜像
扩展名:.vdi
文件类型:virtualbox 磁盘镜像
类型:application/octet-stream
存档格式类型:补丁
- 名称:补丁
扩展名:.diff, .patch
文件类型:diff,patch
MIME类型:text/x-diff
存档格式类型:特殊包
- 名称:InstallShield 安装程序
扩展名:.exe
文件类型:installshield
MIME类型:application/x-dosexec
- 名称:Nullsoft 安装程序
扩展名:.exe
文件类型:nullsoft installer
MIME类型:application/x-dosexec
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
extractcode-31.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 80819392e9bcf8129f74d8904fe8a98c0dfed2782356842737282c0283113d88 |
|
MD5 | 428c307fc9199dfef2c3a284cacc03b0 |
|
BLAKE2b-256 | 582440848587ae0f03ec6da2ae8a28b7ace7219fcbad0bc74e84c582324208ed |
extractcode-31.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9838465035a0e12a744026ef7300c8559fdcce2790cc72faaf2513d1e57a5d94 |
|
MD5 | 65f1f10501f25774c068a9a38b9f2979 |
|
BLAKE2b-256 | d67e0a60071cc9fdd2ec364d6fe7d6bc77632a36c44e9d467b4921ba84f9c921 |