An open API service indexing awesome lists of open source software.

https://github.com/google/fuse-archive

FUSE file system for archives and compressed files (ZIP, RAR, 7Z, ISO, TGZ, XZ...)
https://github.com/google/fuse-archive

archiving filesystem fuse-filesystem zip

Last synced: about 1 month ago
JSON representation

FUSE file system for archives and compressed files (ZIP, RAR, 7Z, ISO, TGZ, XZ...)

Awesome Lists containing this project

README

          

---
title: fuse-archive
section: 1
header: User Manual
footer: fuse-archive 1.19
date: March 2026
---

# NAME

**fuse-archive** - Mount archives as a read-only FUSE file system.

# SYNOPSIS

* **fuse-archive** [*options*] *archive* [*mount_point*]
* **fuse-archive** [*options*] *archive* ... *mount_point*

# DESCRIPTION

**fuse-archive** serves one or several archives or compressed files (e.g.
`foo.tar`, `foo.tar.gz`, `foo.xz` or `foo.zip`) as a read-only
[FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) file system.

It is similar to [**mount-zip**](https://github.com/google/mount-zip) and
[**fuse-zip**](https://bitbucket.org/agalanin/fuse-zip) but speaks a larger
range of archive or compressed file formats.

It is similar to [**archivemount**](https://github.com/cybernoid/archivemount)
but can be much faster (see the Performance section below) although it can only
mount read-only, not read-write.

# OPTIONS

**-\-help** or **-h**
: Print help

**-\-version** or **-V**
: Print version info

**-o quiet** or **-q**
: Print fewer log messages

**-o verbose** or **-v**
: Print more log messages

**-o redact**
: Redact file names from log messages

**-o force**
: Continue despite errors

**-o maxfilters=N**
: Maximum number of filters per archive (default is 1)

**-o lazycache**
: Incremental caching of uncompressed data

**-o nocache**
: No caching of uncompressed data

**-o nomerge**
: Do not merge multiple archives on top of each other. Instead, create a
subdirectory for each archive inside the mount point.

**-o notrim**
: Do not trim the base of the tree. Keep all the intermediate directories as
specified in the archive(s).

**-o nodirs**
: No directories. Flatten the archive structure by presenting all its files in
its root directory. This might make sense if you're not interested in the
archive tree structure, but only in its file data, e.g. for malware scanning.

**-o nospecials**
: Hide special files (FIFOs, sockets, devices)

**-o nosymlinks**
: Hide symbolic links

**-o nohardlinks**
: No files with multiple hard links

**-o noxattrs**
: No extended attributes

**-o dmask=M**
: Directory permission mask in octal (default is 0022)

**-o fmask=M**
: File permission mask in octal (default is 0022)

**-o uid=N**
: Set the file owner of all the items in the mounted archive (default is
current user)

**-o gid=N**
: Set file group of all the items in the mounted archive (default is current
group)

**-o default_permissions**
: Use the file owner (UID), group (GID) and permissions stored with each item
in the archive.

**-f**
: Foreground mode

**-d**
: Foreground mode with debug output

# ARCHIVE FORMATS

**fuse-archive** determines an archive format from its filename extension. It
recognizes the following extensions:

* Archive formats `7z`, `7zip`, `a`, `ar`, `cab`, `cpio`, `deb`, `iso`,
`iso9660`, `jar`, `mtree`, `rar`, `rpm`, `tar`, `war`, `warc`, `xar`, `zip`,
`zipx`
* ZIP-based file formats `crx`, `odf`, `odg`, `odp`, `ods`, `odt`, `docx`,
`ppsx`, `pptx`, `xlsx`
* Compressed TARs `tb2`, `tbr`, `tbz`, `tbz2`, `tz2`, `tgz`, `tlz`, `tlz4`,
`tlzma`, `txz`, `tz`, `taz`, `tzs`, `tzst`, `tzstd`
* Compression filters `br`, `brotli`, `bz2`, `bzip2`, `grz`, `grzip`, `gz`,
`gzip`, `lha`, `lrz`, `lrzip`, `lz`, `lz4`, `lzip`, `lzma`, `lzo`, `lzop`,
`xz`, `z`, `zst`, `zstd`
* ASCII encoding filters `b64`, `base64`, `uu`
* Encryption filters `asc`, `gpg`, `pgp`

If the filename extension is not recognized, then **fuse-archive** determines
the archive format by looking at its byte contents. This heuristic works all
right most of the time, but there are corner cases for which it might get
confused.

**fuse-archive** relies on the availability of the following filter programs:
`base64`, `brotli`, `compress`, `gpg`, `grzip`, `lrzip` and `lzop`.

# CACHING

By default, **fuse-archive** decompresses and caches the whole archive before
serving its contents. This ensures that the served files can be accessed in any
order without any performance issue.

Decompressed data is cached in an anonymous file created in the `tmp` directory
(`$TMPDIR` or `/tmp` by default). This cache can use a significant amount of
disk space, but it is automatically deleted when the archive is unmounted.

If there is not enough temporary space to cache the whole archive,
**fuse-archive** can be run with the `-o nocache` or the `-o lazycache` options.
However, this can cause **fuse-archive** to be much slower at serving files.

# PERFORMANCE

Create a single `.tar.gz` file that is 256 MiB decompressed and 255 KiB
compressed (the file just contains repeated 0x00 NUL bytes):

```
$ truncate --size=256M zeroes
$ tar cfz zeroes-256mib.tar.gz zeroes
```

Here are **fuse-archive**'s timings:

```
$ time fuse-archive zeroes-256mib.tar.gz mnt
real 0m0.443s

$ dd if=mnt/zeroes of=/dev/null status=progress
268435456 bytes (268 MB, 256 MiB) copied, 0.836048 s, 321 MB/s

$ umount mnt
```

For comparison, here are **archivemount**'s timings:

```
$ time archivemount zeroes-256mib.tar.gz mnt
real 0m0.581s

$ dd if=mnt/zeroes of=/dev/null status=progress
268435456 bytes (268 MB, 256 MiB) copied, 570.146 s, 471 kB/s

$ umount mnt
```

In this case, **fuse-archive** takes about the same time to load the archive as
**archivemount**, but it is **~700× faster** (0.83s vs 570s) to copy out the
decompressed contents. This is because **fuse-archive** fully caches the archive
and does not use **archivemount**'s
[quadratic complexity algorithm](https://github.com/cybernoid/archivemount/issues/21).

# RETURN VALUE

**0**
: Success.

**1**
: Generic error code for: missing command line argument, too many command line
arguments, unknown option, mount point is not empty, etc.

**10**
: Cannot create the mount point.

**11**
: Cannot open the archive file.

**12**
: Cannot create the cache file.

**13**
: Cannot write to the cache file. This is most likely the indication that
there is not enough temp space.

**20**
: The archive contains an encrypted file, but no password was provided.

**21**
: The archive contains an encrypted file, and the provided password does not
decrypt it.

**22**
: The archive contains an encrypted file, and the encryption method is not
supported.

**30**
: Cannot recognize the archive format.

**31**
: Invalid archive header.

**32**
: Cannot read and extract the archive.

# SEE ALSO

archivemount(1), mount-zip(1), fuse-zip(1), fusermount(1), fuse(8), umount(8)