{ "info": { "author": "Julien Lamy", "author_email": "julien@seasofcheese.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Communications :: File Sharing", "Topic :: System :: Archiving :: Mirroring" ], "description": "# Sneakersync\n\nSynchronize files through the [sneakernet](https://en.wikipedia.org/wiki/Sneakernet), i.e. using a removable drive.\n\nRequirements:\n\n* [rsync](https://rsync.samba.org/). The version must support extended attributes (`-X` flag).\n* A removable drive with a filesystem matching the source and target computers.\n* Feet or a compatible mean of transportation of the removable drive between computers.\n\n## Installation\n\nSimply run `pip install sneakersync`.\n\n## Configuration\n\nThe configuration is a [YAML](https://en.wikipedia.org/wiki/YAML)-formatted file that contains *modules* (directories to be synchronized) and *filters* (rules that exclude or include files or directories). Each module must contain a *root* entry (the top-level path to be synchronized) and may contain filters; if no filter is specified, all files and directories below the root of the module are included. Filters are defined by a list of *include* or *exclude* directives.\n\nA minimal example which synchronizes the home folder of a user would look like:\n```yaml\nmodules:\n - root: /home/john.doe\n```\n\nTo exclude a directory (and its content) and files with a given extension from a module, add a *filters* directive:\n```yaml\nmodules:\n - root: /home/john.doe\n filters:\n - exclude: /home/john.doe/.firefox/caches\n - exclude: *.pyc\n```\n\nTo filter entries from all modules, use the top-level *filters* directive:\n```yaml\nmodules:\n - root: /home/john.doe\n - root: /home/jane.blogs\nfilters:\n - exclude: .firefox/caches\n```\n\nFilters defined at the top-level will have priority over module-level filters.\n\n## Usage\n\n1. Create a filesystem on a removable drive that matches the source and target computers. \n2. Optional, but highly recommended: [encrypt](https://en.wikipedia.org/wiki/Disk_encryption) your removable drive.\n3. Store the [configuration](#configuration) in a file named `sneakersync.cfg` on the root of the drive.\n4. To send data, run `sneakersync send `.\n5. Move your drive to the other computer and plug it in.\n6. To receive data, run `sneakersync receive `.\n\nKnown limitations:\n* The last access time (`atime`) is not preserved: rsync needs to access files in order to transfer them.\n* The creation / meta-data change time (`ctime`) is not preserved: this attribute is not user-modifiable.\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": "https://github.com/lamyj/sneakersync", "keywords": "synchronization,removable drive,sneakernet,rsync", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sneakersync", "package_url": "https://pypi.org/project/sneakersync/", "platform": "", "project_url": "https://pypi.org/project/sneakersync/", "project_urls": { "Homepage": "https://github.com/lamyj/sneakersync" }, "release_url": "https://pypi.org/project/sneakersync/1.2.2/", "requires_dist": [ "pyyaml" ], "requires_python": "", "summary": "Synchronize files through the sneakernet", "version": "1.2.2" }, "last_serial": 4748729, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "b79e029b275f955612cb5c8620cd2b3f", "sha256": "1254522d60277a3b655a643a0acc668a4a4a694b65c69275f51d2d56882e061c" }, "downloads": -1, "filename": "sneakersync-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "b79e029b275f955612cb5c8620cd2b3f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5919, "upload_time": "2017-10-07T09:18:42", "url": "https://files.pythonhosted.org/packages/bc/7d/19a8f480798529f494f324df01041973619cbea7e576cf6914a729a5ec7f/sneakersync-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18e47c765ac04088a4f6625c3102112c", "sha256": "bd81a740b2c0e19c62e5a5c4e5a3b6777db2997e049b29248258b76293caba46" }, "downloads": -1, "filename": "sneakersync-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "18e47c765ac04088a4f6625c3102112c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5919, "upload_time": "2017-10-07T09:18:44", "url": "https://files.pythonhosted.org/packages/1e/c2/d417eb036552ad11d9713832ee3d85978ef4d99a4b885cf452a03c37cf36/sneakersync-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ec5ecda08fc928fdd750adc74cf63e3", "sha256": "f23b81bc79848befaeb256f59173defc8b025528909456f269e7ea5b5374fad2" }, "downloads": -1, "filename": "sneakersync-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5ec5ecda08fc928fdd750adc74cf63e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3585, "upload_time": "2017-10-07T09:18:46", "url": "https://files.pythonhosted.org/packages/64/19/04bf695ce924bd8b5f61afc31840c435ceb1215a24b424be467e834aa1e7/sneakersync-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "18490bfbac62212d1e8e85ce5886a9f0", "sha256": "bc52dd2cadb0cb8d069756d64ddcb0b0ad94cf39eb5349f8c0e9b66647e66bc3" }, "downloads": -1, "filename": "sneakersync-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "18490bfbac62212d1e8e85ce5886a9f0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6011, "upload_time": "2017-10-07T09:29:59", "url": "https://files.pythonhosted.org/packages/dc/48/c407a8912c578f47876cac836056a15fe90ce2259462f091176d9f5d6885/sneakersync-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28149442a43bb93361132602f054db7a", "sha256": "54f7c4358dba64d354b024eeffe902b9d5d02a174a4a36c42a2ecb4cd21a3928" }, "downloads": -1, "filename": "sneakersync-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "28149442a43bb93361132602f054db7a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6012, "upload_time": "2017-10-07T09:30:00", "url": "https://files.pythonhosted.org/packages/3b/b7/c119742a8d325849c3791d60c956865e8cd87f2a21f738339bac353351af/sneakersync-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7080be92e0d68fb04fce8ceb6e3f65b5", "sha256": "4c8b50818642e2b33dcc4f5a0faa91a7598862005293a03402ecece4fa068ad9" }, "downloads": -1, "filename": "sneakersync-1.0.1.tar.gz", "has_sig": false, "md5_digest": "7080be92e0d68fb04fce8ceb6e3f65b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3711, "upload_time": "2017-10-07T09:30:02", "url": "https://files.pythonhosted.org/packages/22/12/a7a67f76fe1cd9b9905c1e061746e643720a78fb84e65a98df4fac430b42/sneakersync-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "6cb6381da6056ba88f97b626a320e17a", "sha256": "f3a56560e9931baa0faedab183b350b0e18cb85f7528d9ae59a935a645e78292" }, "downloads": -1, "filename": "sneakersync-1.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "6cb6381da6056ba88f97b626a320e17a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6048, "upload_time": "2017-10-08T16:50:35", "url": "https://files.pythonhosted.org/packages/a4/88/52f1454601685381fa24e242380f4060ba4c447084f67f5d0c1b7bf60b72/sneakersync-1.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63c9aa16f409cec640cf8f7219cef220", "sha256": "5d84beeaa2a86b20de74d70f4f083f18154262a785838c33f8fbf502f6348f3f" }, "downloads": -1, "filename": "sneakersync-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "63c9aa16f409cec640cf8f7219cef220", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6049, "upload_time": "2017-10-08T16:50:36", "url": "https://files.pythonhosted.org/packages/2f/c0/2f9d83f64fa6899955a9a96bc5b900906a6e32c63c4a9c55625d35e6a113/sneakersync-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19cc1c5b370118bde936128b1143a82a", "sha256": "92ae60bdd7232e1f17429b4a8082db0222bfcff359148e8c041f9a49be6883b5" }, "downloads": -1, "filename": "sneakersync-1.0.2.tar.gz", "has_sig": false, "md5_digest": "19cc1c5b370118bde936128b1143a82a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3734, "upload_time": "2017-10-08T16:50:38", "url": "https://files.pythonhosted.org/packages/74/c5/650e88bb4363f9137d37b921c9ac6c40fa6f758915b847b0064de4b17ee7/sneakersync-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d2146c8842f82fc0f58dc81943d699e8", "sha256": "60c953a17f579531770ecfc364d81b3e16ec9c25256c6849c31eb0aaca8c3f5e" }, "downloads": -1, "filename": "sneakersync-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d2146c8842f82fc0f58dc81943d699e8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 9419, "upload_time": "2017-10-27T18:27:53", "url": "https://files.pythonhosted.org/packages/32/ba/eb5e98766f4dfbd88261fe0c887918fcf8c9ca96d8d4b0928f5fd50b98f6/sneakersync-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86e259488249a330292884a467543b5f", "sha256": "652448346b0f04c98812354fa229622f15525f8eaa5f728b9df9bfbc310308c6" }, "downloads": -1, "filename": "sneakersync-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "86e259488249a330292884a467543b5f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9420, "upload_time": "2017-10-27T18:27:55", "url": "https://files.pythonhosted.org/packages/40/19/ef29dbd567da8f592eb48f7cbf7b5b4e496ee05383754c36c5abb1998b7f/sneakersync-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2359bb5443979d3e1731d939821d1006", "sha256": "d90356579831202e115abb6e848fb18c02bbee35becfae645f36a3e2bf9c0769" }, "downloads": -1, "filename": "sneakersync-1.1.0.tar.gz", "has_sig": false, "md5_digest": "2359bb5443979d3e1731d939821d1006", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5285, "upload_time": "2017-10-27T18:27:56", "url": "https://files.pythonhosted.org/packages/26/f3/c8cf74a562171435d2bd4d6787040f040b03c9985d33fcf31f8c0fa812e8/sneakersync-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "ad2bbdae29e20ded887115dbf2263e7f", "sha256": "b63829481ca928ddaa48983e3ce21db7ea0263cdaf582135917c1dcd5e59dd5a" }, "downloads": -1, "filename": "sneakersync-1.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "ad2bbdae29e20ded887115dbf2263e7f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8291, "upload_time": "2017-10-28T07:38:49", "url": "https://files.pythonhosted.org/packages/cd/8f/7f077fed4000d83d4a8c5b6a7c117856bcc87087938deab65088c39eeb82/sneakersync-1.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d9918dad38418c34008728dd1e3f7c6", "sha256": "7c1e02cc4f28f4c95a93722318a646d57d53fa487c5806c3779b9e315c4430fc" }, "downloads": -1, "filename": "sneakersync-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3d9918dad38418c34008728dd1e3f7c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8292, "upload_time": "2017-10-28T07:38:50", "url": "https://files.pythonhosted.org/packages/1c/91/31eaa39d99cdb18f5321fa754185fbf494601cc6b9764aa9528dacc124d5/sneakersync-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e3113c6d522023031cfc66f9f17246d", "sha256": "aede0803f623f87ac63cc5ca0947cbacca1527ba3290183477362c73d3726ea9" }, "downloads": -1, "filename": "sneakersync-1.1.1.tar.gz", "has_sig": false, "md5_digest": "7e3113c6d522023031cfc66f9f17246d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5110, "upload_time": "2017-10-28T07:38:51", "url": "https://files.pythonhosted.org/packages/bc/c2/33e2a3a979d97ce5558a474d3205a2c18b0767fd411725da30161607eba4/sneakersync-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "f46f8e151674769d5e14cc51fe851428", "sha256": "e1fe2e572ec511c2b8ecd5625dbf8ec19d23dc85e104debdac1a2890cf7d3603" }, "downloads": -1, "filename": "sneakersync-1.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "f46f8e151674769d5e14cc51fe851428", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8288, "upload_time": "2017-10-28T07:45:39", "url": "https://files.pythonhosted.org/packages/50/c7/9403264452957aae8ccea93e686121deabc9635090a69f34c94c7401f0a2/sneakersync-1.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57d0523dabad7411392094993060484b", "sha256": "81e19393beab20de74f1dcf605168d77be7e7ad93a1e4b7fd6db7428d6d224c5" }, "downloads": -1, "filename": "sneakersync-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "57d0523dabad7411392094993060484b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8290, "upload_time": "2017-10-28T07:45:41", "url": "https://files.pythonhosted.org/packages/23/cd/5132f4e70bdc64adbd083a09d8993f1db989512c009b625488a662b70205/sneakersync-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d28cc34303a048bacde6e9fd64bce1a2", "sha256": "7999d29bddd64d5504ff948130e043fda48ff1dd2b126f192474fe7bff9a470a" }, "downloads": -1, "filename": "sneakersync-1.1.2.tar.gz", "has_sig": false, "md5_digest": "d28cc34303a048bacde6e9fd64bce1a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5148, "upload_time": "2017-10-28T07:45:42", "url": "https://files.pythonhosted.org/packages/bf/8f/4f9aea4a3a819f5c609514fe03586051199ad5d5deb601d59158e2904f35/sneakersync-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "0068836458bd1e5a3ba088563896ebcd", "sha256": "160e48a637cb385683174a6a4b7c200775e76e10fab265b76f43f05d5b1f6cb9" }, "downloads": -1, "filename": "sneakersync-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "0068836458bd1e5a3ba088563896ebcd", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6670, "upload_time": "2018-12-29T16:26:15", "url": "https://files.pythonhosted.org/packages/fe/70/3f29234f7547758a66fbfdca95603f79104807428fef7bb4b742444868a9/sneakersync-1.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec98a289fd98d1cfefa20baa3678af6f", "sha256": "8b1a34b4dc59e9693ad201bd0006d278e8ffad8cd6229f0d93d8c0194722f5bb" }, "downloads": -1, "filename": "sneakersync-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ec98a289fd98d1cfefa20baa3678af6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7493, "upload_time": "2019-01-27T10:43:42", "url": "https://files.pythonhosted.org/packages/02/0e/c7bf7202aa58d63d0b98c44a527a66fc20b9e7be45ba18fb0df30a9b09c8/sneakersync-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7eaf8a9d10b400cfad585d62edcb5876", "sha256": "6178922e74e67b05ef3d57f206e24ef32478af2a63a43f07006f63de11bf4f14" }, "downloads": -1, "filename": "sneakersync-1.2.0.tar.gz", "has_sig": false, "md5_digest": "7eaf8a9d10b400cfad585d62edcb5876", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5199, "upload_time": "2019-01-27T10:43:43", "url": "https://files.pythonhosted.org/packages/8a/e1/9f30a56943af9ca61a0d805630b5cd55d42ee9c3e2886f1bd53937c16119/sneakersync-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "2677dff872eab652a5075c86e467b95a", "sha256": "d14e2434032c6dec6bd321649191a142813d442edf8f6d014d80bd27ec58fbfd" }, "downloads": -1, "filename": "sneakersync-1.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "2677dff872eab652a5075c86e467b95a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6733, "upload_time": "2019-01-27T15:31:39", "url": "https://files.pythonhosted.org/packages/d5/09/9ea9d3dda7bc571ee5c85aded1c87598b9003d3e62a334ae9b2e30f0f132/sneakersync-1.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04034a3bdf24c73da0e13eca168b97df", "sha256": "f71dcf5eab92c9e025f6d2877270c6ba4cf59809fb8d622548069d91c3dadf98" }, "downloads": -1, "filename": "sneakersync-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "04034a3bdf24c73da0e13eca168b97df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7556, "upload_time": "2019-01-27T15:31:40", "url": "https://files.pythonhosted.org/packages/05/12/23ae5edb19c565d2ae5d3d549efe5055191466f8a1a3bf833b5e564b582f/sneakersync-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af984496ecb8d07490579f7dab2153a5", "sha256": "5f2c1fd68fd4c261f3add00adee12893410f78849c481db8910ec40c4841ad59" }, "downloads": -1, "filename": "sneakersync-1.2.1.tar.gz", "has_sig": false, "md5_digest": "af984496ecb8d07490579f7dab2153a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5248, "upload_time": "2019-01-27T15:31:42", "url": "https://files.pythonhosted.org/packages/a5/c5/483090f4e1d6d50d173081d47b756a3fd67940880d18f743cd570551f7c6/sneakersync-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "0ec28c0e81726c69534ebd106677343c", "sha256": "b1c70adcc794802f17899adc65b5c7b656f1455bb3ecee22f83756af7be2c113" }, "downloads": -1, "filename": "sneakersync-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0ec28c0e81726c69534ebd106677343c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7562, "upload_time": "2019-01-28T06:59:38", "url": "https://files.pythonhosted.org/packages/96/e7/44ceedb60d45df124dd5167f8848699968da4020b78059f147de9d4cd59d/sneakersync-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "753d713f3904bde6f19f8f747c8d1173", "sha256": "956d071ece5418751b62c8a98129b5502fc95d0c448ddf9912bc88b9a2c6659d" }, "downloads": -1, "filename": "sneakersync-1.2.2.tar.gz", "has_sig": false, "md5_digest": "753d713f3904bde6f19f8f747c8d1173", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5246, "upload_time": "2019-01-28T06:59:39", "url": "https://files.pythonhosted.org/packages/2a/de/38edc193d8f42bbc063a1622744d382c61df23563f1db49796f5f35a5986/sneakersync-1.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0ec28c0e81726c69534ebd106677343c", "sha256": "b1c70adcc794802f17899adc65b5c7b656f1455bb3ecee22f83756af7be2c113" }, "downloads": -1, "filename": "sneakersync-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0ec28c0e81726c69534ebd106677343c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7562, "upload_time": "2019-01-28T06:59:38", "url": "https://files.pythonhosted.org/packages/96/e7/44ceedb60d45df124dd5167f8848699968da4020b78059f147de9d4cd59d/sneakersync-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "753d713f3904bde6f19f8f747c8d1173", "sha256": "956d071ece5418751b62c8a98129b5502fc95d0c448ddf9912bc88b9a2c6659d" }, "downloads": -1, "filename": "sneakersync-1.2.2.tar.gz", "has_sig": false, "md5_digest": "753d713f3904bde6f19f8f747c8d1173", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5246, "upload_time": "2019-01-28T06:59:39", "url": "https://files.pythonhosted.org/packages/2a/de/38edc193d8f42bbc063a1622744d382c61df23563f1db49796f5f35a5986/sneakersync-1.2.2.tar.gz" } ] }