跳转到主要内容

将存档作为文件系统挂载。

项目描述

介绍

此软件包,explosive.fuse,提供了一个命令行工具,explode,用于使用FUSE将存档文件(如zip)挂载到目录,允许直接访问压缩存档中的单个文件条目,而无需典型的中间步骤,即解压缩到某个临时位置,即所有文件解压缩都是动态的,按需进行。这个库考虑了模块化,以允许定制,例如如何在挂载位置呈现存档中的文件条目,以及其中可以重用的辅助类和函数。

目前,支持以下存档格式

  • zip(内置包 zipfile

  • rar(需要第三方包 unrar

需要第三方包的存档格式默认不启用。要启用,请按照指定安装包,更多关于它们的信息可以通过上面的链接访问。

https://travis-ci.org/metatoaster/explosive.fuse.svg?branch=0.5.x https://coveralls.io/repos/metatoaster/explosive.fuse/badge.svg?branch=0.5.x

安装

如果满足所有系统级依赖项,安装过程就是单个 pip 调用,如下所示

$ pip install explosive.fuse

这可以在系统级别(即使用 sudo)进行,使所有系统用户都可以使用它,也可以在虚拟环境内为单个用户进行。

系统级依赖项

ExplosiveFUSE需要操作系统中的FUSE内核模块及其用户空间工具可用,以及Python 2.7/3.3+/PyPy。

首先,如果尚未安装,请安装FUSE内核模块和用户空间工具。

Linux

Arch Linux

$ sudo pacman -S fuse

Debian/Ubuntu

$ sudo apt-get install fuse

Gentoo(也请参阅其FUSE维基页面

$ sudo emerge --ask sys-fs/fuse

RedHat/CentOS/Fedora

$ sudo yum install fuse

OS X

这已经在Travis-CI提供的实验性构建功能中得到一定程度的测试,依赖项通过Homebrew安装。有关安装Homebrew的说明,请参阅https://brew.sh.cn/上的说明。

完成这些后,可以使用以下命令安装OS X的FUSEpyenv(提供Python版本管理)的软件包

$ brew update
$ brew install caskroom/cask/osxfuse
$ brew install pyenv
$ pyenv install 3.5.2  # or your desired version of Python
$ pyenv global 3.5.2
$ pyenv rehash

其他安装方法

可以使用以下命令将其安装到默认的用户特定库目录(通常是~/.local

$ pip install --user explosive.fuse

然后,可执行文件将在~/.local/bin/explode可用。

或者也可以在虚拟环境中安装

$ virtualenv ~/.venv
$ source ~/.venv/bin/activate
$ pip install explosive.fuse

当然,可以从源代码安装,如果已安装git,则可以这样安装最新开发版本

$ pip install git+https://github.com/metatoaster/explosive.fuse#egg=explosive.fuse

或者,也可以手动使用gitpython setup.py develop

用法

只需在shell中调用explode即可显示此帮助信息

usage: explode [-h] [-l <strategy>] [--layout-info] [-d] [-f] [-m]
               [--manager-dir [MANAGER_DIR]] [--overwrite] [--omit-arcname]
               [-V]
               dir archives [archives ...]

在最简单的形式中,命令可以像这样调用

$ mkdir /tmp/mnt
$ explode /tmp/mnt demo1.zip

这将把demo1.zip的内容挂载到/tmp/mnt。要验证是否成功,可以使用简单的ls命令

$ ls -l /tmp/mnt/
total 0
-r--r--r-- 1 user user 33 Oct 26 23:19 file1
-r--r--r-- 1 user user 33 Oct 26 23:19 file2
-r--r--r-- 1 user user 33 Oct 26 23:19 file3
-r--r--r-- 1 user user 33 Oct 26 23:19 file4
-r--r--r-- 1 user user 33 Oct 26 23:19 file5
-r--r--r-- 1 user user 33 Oct 26 23:19 file6

文件显示为属于创建此挂载点的用户。有关访问权限的详细信息,请参阅fuse用户手册(即man fuse)。

要卸载,只需调用

$ fusermount -u /tmp/mnt/

或者如果它在前台运行,终止进程。

可以将多个存档解压缩到目标目录中

$ explode /tmp/mnt demo1.zip demo2.zip

默认情况下,将使用新的布局策略,这将包括源存档文件的名称。这可以通过以下方式验证

$ ls -l /tmp/mnt/
total 0
dr-xr-xr-x 2 user user 0 Oct 26 23:22 demo1.zip
dr-xr-xr-x 2 user user 0 Oct 26 23:22 demo2.zip

布局策略

可以通过使用布局策略修改结果文件系统中文件条目的布局方式。这使用-l--layout标志进行指定。当然,最终结果也受--overwrite--omit-arcname标志以及与每个策略相关的参数的影响(这些参数通过附加:后跟每个位置参数的值来指定)。有关每个可用策略的详细信息,可以通过调用explode --layout-info获得,但为了完整性,以下策略由默认安装提供

codepage

将指定代码页的文件名条目解码为Unicode。示例:使用-l codepage:shift_jis将看起来像é▒é±é╔é┐é═的文件名解码为こんにちは

default

将文件条目以它们在各自的目录结构中的形式呈现给源存档的根目录。

flatten

将目录结构扁平化到挂载点根目录,默认情况下,通过将每个文件条目的所有路径分隔符替换为_字符来实现。此字符可以通过使用参数语法指定(例如,使用-l flatten:- 将替换所有路径分隔符为-字符)。

垃圾

垃圾路径,对于正的保留数量,仅保留从根目录到指定级别的目录,否则对于负的保留数量,保留除绝对数量以外的保留级别之前的所有目录。默认情况下不保留任何目录。如果希望保留源存档名称作为容器目录(即使用-l junk:1),则很有用,如果不使用--omit-arcname

重要说明:默认情况下,存档文件的基名将在通过布局策略过滤之前添加到其每个文件条目之前,除非使用--omit-arcname标志。

用于微调文件系统行为的标志

--debug

将调试消息打印到标准输出。

--foreground

在前台运行。

-m, --manager

启用符号链接管理器目录。此选项将管理目录(由--manager-dir标志定义,默认为挂载点根目录下的.manager)下的所有存档文件作为符号链接暴露。创建指向有效存档文件的符号链接将添加其中的文件条目到文件系统,删除符号链接将删除其关联条目从文件系统中。

--omit-arcname

有时可能希望从生成的路径中省略源存档文件的名称。

例如,如果我们有多个存档文件,名称从SNS_001.zipSNS_100.zip,并且在里面我们简单地有位于根级别的文件,如01.jpg20.jpg,激活--omit-arcname标志将导致只能访问SNS_001.zip存档中的20个文件,默认情况下,这是第一个被指定加载的文件。

-s, --splitext-arcname

有时可能希望从源存档文件的名称中拆分出文件扩展名。

--overwrite

当有多个存档文件具有相同的文件名时很有用,并且仅希望保留最新的一个,此标志将“覆盖”映射过程中遇到的任何现有条目。

故障排除

错误消息

挂载显示以下错误消息

fusermount: failed to open /etc/fuse.conf: Permission denied

这可以安全忽略,或者您可以将系统管理员授予对文件的读取访问权限,将您的账户添加到系统的fuse用户组或等效组,或者将文件的权限更改为世界可读,因为该文件在典型使用情况下不包含任何敏感信息。

其他问题

如果您在使用此软件时遇到任何其他问题,请使用此项目的问题跟踪器提交问题。

许可证

本作品根据GNU通用公共许可证,版本3授权。

变更日志

0.5 (2018-07-13)

  • 支持删除文件扩展名(主要用于改善某些文件管理器的文件名排序显示);可以通过 -s--splitext-arcname 标志进行切换。

  • 能够提取没有 .zip 文件扩展名的 zip 文件,因为这现在是默认的回退机制,以更好地支持使用 zip 的常见文件格式,例如 odtdocx

0.4 (2016-08-20)

  • 通过 unrar 包添加了对 RAR 归档格式的支持。

0.3 (2015-12-12)

  • 现在映射使用绝对路径以确保在守护进程模式下也能正常工作。

  • 新的布局策略:可以使用代码页将非 Unicode 名称编码重映射为 Unicode。

  • 文件所有权现在显示为由启动挂载进程的用户所拥有。

  • 添加了符号链接管理支持;此功能通过 -m 标志启用,可选地使用 --manager-dir 来显式更改其位置。这允许通过在管理目录中添加和删除符号链接来加载和卸载文件。

  • 由于仅在需要时调用 inflate,因此降低了内存消耗和读取性能。然而,这需要暂时使用单线程模式。

0.2 (2015-10-31)

  • 移除了专门的归档布局策略(即 zip* 中的那些)

  • 默认情况下,归档的基本名将被添加到每个文件条目的路径前面。此行为可以通过 --omit-arcname 标志直接禁用。(当然,布局策略仍然可以修改该路径,例如 junk。)

  • 所有 pathmaker 可调用函数现在实际上是工厂,用于产生实际的 pathmaker。它们现在可以接受参数以影响产生的 pathmaker 的行为。参数可以使用扩展的 -l--layout 语法输入。详细信息请参阅 --layout-info

  • 实现了 --overwrite 标志,允许较新的条目“覆盖”现有的条目。

  • 进行了许多其他内部 API 的更改。

0.1 (2015-10-26)

  • 这是初始版本,仅支持基本的 zip 文件。

  • 文件提取是原始的,因为每次读取都会将单个给定文件条目的全部内容提取到内存中。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分布

explosive.fuse-0.5.zip (32.5 kB 查看哈希值

构建分布

explosive.fuse-0.5-py2.py3-none-any.whl (20.1 kB 查看哈希值

上传于 Python 2 Python 3

由以下支持