Skip to content

ericl/groupfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Non-hierarchical filesystem for organizing large file collections. Unlike other implementations of the concept, it is designed to act as much like a "normal" filesystem as possible and can provide a complementary "view" of existing hierarchical trees.

In short, the file
	/origin/dir/A/B/name-of-file.png
can be found, once mounted, in
	/mount/point/.png
	/mount/point/A
	/mount/point/B
Further subdirectories will appear to narrow
down the query if possible.

=== Usage ===
Depends on FUSE-J (java bindings for FUSE)
	http://sourceforge.net/projects/fuse-j/

Run 'ant' to compile.

Usage: groupfs_mount.sh [-o options] /origin/dir /mount/point

Examples:
	./groupfs_mount.sh ~/Pictures ~/Desktop/groupfs_Pictures
	./groupfs_mount.sh ~/Music ~/Desktop/groupfs_Music
	./groupfs_mount.sh /usr/share/icons ~/Desktop/groupfs_icons
	./groupfs_mount.sh . ~/Desktop/groupfs_groupfs

=== Details ===
Filesystem "axioms":

	The root directory has no group and no parent.
	The groups of a directory are its group and the groups of its parent.

	The groups of a file is a set of 1 group representing its mimetype
	and any number of tag groups.
	Any file with only no tag groups will be assigned the mimetype group "trashed".

	Let F be the set of all existing files.
	Let G be all possible sets of groups.

	The files of a directory d are {f in F : groups of d ⊆ groups of f}

	The child dirs of a directory d represent the set of groups
	{x in G : g ⊂ x, |x| = 1 + |g|, files of x ⊂ files of d}
	with g as the groups of d if d's group exists,
	and does not represent a mimetype.

Standard filesystem operations like moving, deleting, and creating files and directories
are supported as well as possible while maintaining the logical consistency of the filesystem.
EX:
	- unlink() moves the file to the "trash"
	- rmdir() removes the dir's group from the files of the dir
	- rename() on a directory changes the groups of its contents
	- rename() on a file simply changes its name

The current storage mechanism represents groups with traditional directories,
so any existing directory tree can be mounted directly.

About

FUSE filesystem that provides a mutable, directories-are-tags view of existing file collections.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published