{ "info": { "author": "Rohit Biswas", "author_email": "biswasrohit143@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3 :: Only", "Topic :: System :: Filesystems", "Topic :: Utilities" ], "description": "# SFS (Symbolic File System)\n\n*A command line utility that provides a lightweight setup for organizing and backing up files*\n\nSFS stores files from a variety of sources, aka collections, that may include directories and\nremovable media, as symbolic links to the source files.\nIt also stores the metadata of the source files so that files can later be queried without having to\nplug in the source media. \n\nAn SFS is a managed directory which is initialized with the command: `sfs init`. All commands to\nbe executed in the context of an individual SFS must be run from within the SFS directory tree.\nFiles are added using the command `sfs add-col my_collection /path/to/source` (add collection).\n*SFS Files* are symlinks to source files in added collections. Foreign links and other files can\nalso exist in an SFS but they are not managed by it and are mostly ignored.\n\n#### Use Cases\n\n - __Organizing Data Across Discs__ \n\n SFS was built with the motivation of being able to have a combined view of data stored across\n multiple discs, organize the data in the view and reflect changes back to source discs. This\n is an effortless way of organizing content across discs which is otherwise painfully slow\n and limited as we can operate on a limited number of discs simultaneously and inter disc transfers\n are very slow. Since all operations in an SFS are performed within the same disc and on symlinks\n instead of heavy files, they are much faster\n\n __Note:__ To view the content of a file we obviously do need the source to be available. So, if \n there is a need of viewing file content while organizing them, the source needs to be plugged in which\n might or might not be appropriate for all use cases. However, SFS makes it easy to query the \n source of an SFS File when it is needed to be accessed\n\n - __Backing up Files__\n\n While there are lots of ways to make direct backups of directories, an SFS allows you to organize\n the content while backing them up and potentially saving them to multiple destinations with a single command.\n For exaback themmple, you might have an SFS in which you add local files, like multimedia and documents, organize\n them in hierarchies resembling your storage hierarchies, then map the top-level SFS directories to backup\n destinations and preform the backup with a single save command. Periodically, you will have to synchronize\n the SFS, sort the newly added local files and rerun the backup.\n\n - __Decouple Data Storage and View__\n\n Data often needs to be stored in a certain way which might not be similar to the hierarchy in which you want\n to view it. SFS allows you to create a virtual hierarchy for viewing content. For example, consider that you have\n data saved in a number of discs or directories, organized as music, documents, projects, etc. Your options are\n either to keep a copy of the important files locally, which we commonly do, or to plugin all the media one by\n one and search for the files you need, which hopefully no one does. You can instead create an SFS instance,\n dump all your discs into it, create a directory in the SFS for local files and copy all needed files to your\n local system. You can search for files in all your discs locally and, periodically, you can update what files to be\n kept in you local system\n\n#### Commands\n # SFS Operations\n init Initialize a new SFS in the current directory\n is-sfs Check whether a path is inside an SFS\n\n # Collection Operations\n add-col Add a named collection to the current SFS\n -n, --name\n Collection name (defaults to source root directory name)\n is-col Check whether a path is inside any collection added to the current SFS\n list-cols List all collections in the current SFS\n del-col Delete a collection and associated symllinks from \n the current SFS \n sync-col Synchronize any changes made to a collection (addition, \n modification and deletion of files)\n\n # Querying SFS files\n query Query metadata of a file or directory in an SFS\n\n # Deduplication\n find-dups Check for duplicate files (by name and size) recursively \n in a target directory and save dulicates to a JSON file\n in the target directory\n -o, --override\n Override the generated JSON file if it exists\n -d, --del-duplicates\n Mark duplicates (all but first in a list of duplicate files) for deletion\n dedup Use the JSON file (after manually choosing which files to\n keep) to delete duolicates in a target directory\n -d, --del-json\n Delete the generated JSON file after a successful de-deuplication\n\n # Merge\n merge Merge two non-nested directories in an SFS. In case of merge\n conlicts, the process terminates after saving conflicting files\n to a JSON. The file can be edited and used for completing the\n merge operation\n -k, --on-conflict\n Conflict resoution can be one of keep-target, keep-source or keep-both\n -c, --continue\n Use specified or default conflict rsolution without saving conflicts JSON\n -j, --json\n Use the generated JSON file for handling conflicts \n -o, --override\n Override the generated JSON file if it exists\n -d, --del-json\n Delete the generated JSON file after a successful merge\n -s, --del-source\n Delete the source directory after a successful merge\n\n#### Usage\n\nInstall with pip\n\n pip install symbolic-file-system\n\nOr clone this repo and run setup directly\n\n python3 setup.py install\n\nAccess all SFS commands through the installed script named *sfs*\n\n mkdir my-first-sfs\n cd my-first-sfs\n sfs init\n sfs add-col my-hdd /media/hdd\n\nYou can run tests with nose\n\n nosetests\n\n#### Work in Progress\n\n - __Saving Changes Made Back to Source__ \n\n Any changes made to the organisation of links in an SFS, like deletion, renaming \n or relocation will be reflected back to the source discs or directories. There will\n be a number of modes of saving changes:\n - __Copy__: Files will be copied to an actual directory or drive with the same file\n hierarchy as some directory in an SFS, the copied files being actual source files\n from various collections\n - __Move__: The source files will be moved to a new destination as specified by the\n SFS file hierarchy and save mapping\n - __Delete__: Files deleted in an SFS will be reflected back to a collection source\n or a part of it\n - __Save__: In this mode, an exhaustive mapping of SFS directories and collection\n sources will be specified and changes will be reflected in all collections, internally\n executing __Move__ and __Delete__ on all of them\n\n - __Filtering Files__\n\n SFS will add the ability to filter SFS Files and directories, a feature missing from most\n file systems. The following filters will be available:\n - Filter by file size\n - Filter by file type\n - Filter by any custom properties\n\n - __Adding Properties to Files and Directories__\n\n It will be possible to add properties to files and directories in an SFS an look them up which can be useful\n for simply tagging them and can even be used while applying filters\n\n - __Freezing Directories__\n\n *Freeze* will be a special property that can be applied to directories in an SFS to prevent\n them from being manipulated by SFS commands like Merge, Filters and De-duplication. This\n can be useful for hierarchies like project and application directories which must remain intact\n\n\n#### Tips\n\n - Though SFS is all about symlinks and your source files are always safe, it is recommended to back\n up the SFS root directory before doing anything adventurous. Backing up is as simple is making a \n copying os the SFS root directory\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "symbolic-links file-system organize backup utility", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Symbolic-File-System", "package_url": "https://pypi.org/project/Symbolic-File-System/", "platform": "", "project_url": "https://pypi.org/project/Symbolic-File-System/", "project_urls": null, "release_url": "https://pypi.org/project/Symbolic-File-System/2.0.0/", "requires_dist": null, "requires_python": ">=3", "summary": "Lightweight file manager for backing up and organizing your data", "version": "2.0.0" }, "last_serial": 4647731, "releases": { "2.0.0": [ { "comment_text": "", "digests": { "md5": "c41f7f6d7633864aa3b3170bcd2c0616", "sha256": "cf602ab18c9b71fe008de31030a3c1a156b5a60439167e06936ff7c214df95c6" }, "downloads": -1, "filename": "Symbolic_File_System-2.0.0-py3.7.egg", "has_sig": false, "md5_digest": "c41f7f6d7633864aa3b3170bcd2c0616", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3", "size": 65028, "upload_time": "2018-12-31T08:27:46", "url": "https://files.pythonhosted.org/packages/e5/32/65a15ec959c30e81bce7369df362e7c029d3b92a455946a99732cdd2f2b4/Symbolic_File_System-2.0.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "9d71c87f678fd6338b9bf429ee66285c", "sha256": "12a800c14dfe6d79e4ae56613a4e627f70f21d00c8b32c382cd7f74028b0281a" }, "downloads": -1, "filename": "Symbolic_File_System-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9d71c87f678fd6338b9bf429ee66285c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30060, "upload_time": "2018-12-31T08:27:43", "url": "https://files.pythonhosted.org/packages/6e/df/82adc54f330fc9de5097e291eb06a696027d5f36d26da6db434f51b613ca/Symbolic_File_System-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3f6d11f7a4fb4b4a3801409ec757c73", "sha256": "5d59556c596dfe10ce38748830c795136a4197e8a8401588b98fda620e4fc028" }, "downloads": -1, "filename": "Symbolic-File-System-2.0.0.tar.gz", "has_sig": false, "md5_digest": "d3f6d11f7a4fb4b4a3801409ec757c73", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22902, "upload_time": "2018-12-31T08:27:48", "url": "https://files.pythonhosted.org/packages/0e/9b/12dd19ac54cb68c4a1905eac3b4723466013ac1156fcba77e90292970e51/Symbolic-File-System-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c41f7f6d7633864aa3b3170bcd2c0616", "sha256": "cf602ab18c9b71fe008de31030a3c1a156b5a60439167e06936ff7c214df95c6" }, "downloads": -1, "filename": "Symbolic_File_System-2.0.0-py3.7.egg", "has_sig": false, "md5_digest": "c41f7f6d7633864aa3b3170bcd2c0616", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3", "size": 65028, "upload_time": "2018-12-31T08:27:46", "url": "https://files.pythonhosted.org/packages/e5/32/65a15ec959c30e81bce7369df362e7c029d3b92a455946a99732cdd2f2b4/Symbolic_File_System-2.0.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "9d71c87f678fd6338b9bf429ee66285c", "sha256": "12a800c14dfe6d79e4ae56613a4e627f70f21d00c8b32c382cd7f74028b0281a" }, "downloads": -1, "filename": "Symbolic_File_System-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9d71c87f678fd6338b9bf429ee66285c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30060, "upload_time": "2018-12-31T08:27:43", "url": "https://files.pythonhosted.org/packages/6e/df/82adc54f330fc9de5097e291eb06a696027d5f36d26da6db434f51b613ca/Symbolic_File_System-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3f6d11f7a4fb4b4a3801409ec757c73", "sha256": "5d59556c596dfe10ce38748830c795136a4197e8a8401588b98fda620e4fc028" }, "downloads": -1, "filename": "Symbolic-File-System-2.0.0.tar.gz", "has_sig": false, "md5_digest": "d3f6d11f7a4fb4b4a3801409ec757c73", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22902, "upload_time": "2018-12-31T08:27:48", "url": "https://files.pythonhosted.org/packages/0e/9b/12dd19ac54cb68c4a1905eac3b4723466013ac1156fcba77e90292970e51/Symbolic-File-System-2.0.0.tar.gz" } ] }