{ "info": { "author": "Paul Schwendenman", "author_email": "schwendenman.paul+twintrim@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only", "Topic :: Utilities" ], "description": "--------------\nTwintrimmer\n--------------\n\nIntroduction\n-------------\n\nTwintrimmer is a project designed to automatically remove duplicate files\nspecially those created by downloading in a browser.\n\nBuild Status\n-------------\n\nBuild: |master|_\n\n.. |master| image:: https://travis-ci.org/paul-schwendenman/twintrim.svg?branch=master\n.. _master: https://travis-ci.org/paul-schwendenman/twintrim\n\nModivation\n-----------\n\nRelatively often I find that I download a file multiple times using Chrome\nor Firefox and they rather than over writing the file \"``.``\"\nwill name the newest copy \"`` (#).``\" I built this tool to\nautomatically remove duplicate versions by comparing the names and then\nvalidating the content with a checksum.\n\n\nUsage\n-------\n\nusage: twintrim [-h] [-n] [-r] [--verbosity VERBOSITY]\n [--log-file LOG_FILE] [--log-level LOG_LEVEL]\n [-p PATTERN] [-c] [-i]\n [--hash-function {'sha224', 'sha384', 'sha1', 'md5', 'sha512', 'sha256'}\n [--make-links] [--remove-links]\n path\n\ntool for removing duplicate files\n\npositional arguments:\n path path to check\n\noptional arguments:\n -h, --help show this help message and exit\n -n, --no-action show what files would have been deleted\n -r, --recursive search directories recursively\n --verbosity VERBOSITY\n set print debug level\n --log-file LOG_FILE write to log file.\n --log-level LOG_LEVEL\n set log file debug level\n -p PATTERN, --pattern PATTERN\n set filename matching regex\n -c, --only-checksum toggle searching by checksum rather than name first\n -i, --interactive ask for file deletion interactively\n --hash-function\n {'sha224', 'sha384', 'sha1', 'md5', 'sha512', 'sha256'}\n set hash function to use for checksums\n --make-link create hard link rather than remove file\n --remove-links remove hardlinks rather than skipping\n --version show program's version number and exit\n\n\n\nExamples\n==========\n\n find matches with default regex::\n\n $ twintrim -n ~/downloads\n\n find matches ignoring the extension::\n\n $ ls examples/\n Google.html Google.html~\n $ twintrim -n -p '(^.+?)(?: \\(\\d\\))*\\..+' examples/\n examples/Google.html~ would have been deleted\n\n find matches with \"__1\" added to basename::\n\n $ ls examples/underscore/\n file__1.txt file.txt\n $ twintrim -n -p '(.+?)(?:__\\d)*\\..*' examples/underscore/\n examples/underscore/file__1.txt to be deleted\n\n\n\nTry it out\n============\n\nIf you would like to try it out I have included an example directory. After\ncloning the repository, try running::\n\n\tpython -m twintrimmer examples/\n\n\nRunning the Tests\n------------------\n\nUnit tests\n=============\n\nTo run tests::\n\n python -m unittest discover -p '*_test.py'\n\nor using nose::\n\n python3 -m nose --with-json-extended\n\n:note: pyfakefs is not being updated on pypi and should be installed directly\n from the github repository, due to issues with pyfakefs and python3 in\n the pypi version\n\ncommand to install pyfakefs::\n\n pip install git+https://github.com/jmcgeheeiv/pyfakefs\n\nCode coverage\n===============\n\nTo show the test coverage::\n\n python -m nose --with-coverage --cover-package twintrimmer.twintrimmer\n\nBehavior tests\n===============\n\nTo run tests::\n\n behave\n\nMaking the Documentation\n-------------------------\n\nHTML docs\n==========\n\n::\n\n cd docs/\n make html\n\nDocumentation Coverage Report\n==============================\n\nTo make the coverage report appear in the docs::\n\n cd docs/\n make coverage\n make html\n\nOptionally, you can view the coverage report directly after\nrunning ``make coverage``::\n\n cat _build/coverage/python.txt\n\nMiscellaneous\n----------------\n\nHash algorithm options\n=======================\n\nDepending on your installed OpenSSL library your available algorithms might change.\n\nThe following are the hash algorithms guaranteed to be supported by this\nmodule on all platforms.\n\n- sha224\n- sha384\n- sha1\n- md5\n- sha512\n- sha256\n\nAdditionally, these algorithms might be available (potentially more)\n\n- ecdsa-with-SHA1\n- whirlpool\n- dsaWithSHA\n- ripemd160\n- md4\n\nFor more information on these algorithms please see the hashlib documentation:\n\n\thttps://docs.python.org/3/library/hashlib.html", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/paul-schwendenman/twintrim", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "twintrimmer", "package_url": "https://pypi.org/project/twintrimmer/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/twintrimmer/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/paul-schwendenman/twintrim" }, "release_url": "https://pypi.org/project/twintrimmer/0.14/", "requires_dist": null, "requires_python": null, "summary": "tool for removing duplicate files", "version": "0.14" }, "last_serial": 1857998, "releases": { "0.10": [ { "comment_text": "", "digests": { "md5": "1d053ec02f5eafcf90fcfa06ef71fb12", "sha256": "565a63fd3e85682e7039daf7dce1913093839f0a1115afcb21bddfc001d59b00" }, "downloads": -1, "filename": "twintrimmer-0.10.tar.gz", "has_sig": false, "md5_digest": "1d053ec02f5eafcf90fcfa06ef71fb12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8314, "upload_time": "2015-10-03T06:46:05", "url": "https://files.pythonhosted.org/packages/43/67/6d4a984970f3783c34905da5a326dac8a45253171ba4452b77ef226880c4/twintrimmer-0.10.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "31606d82c499084e2b6d93aa3e9f6e84", "sha256": "7536177296c2a4a66e3e6aa488cad64bd0749127f7d128a6826b4ac90d1eabe4" }, "downloads": -1, "filename": "twintrimmer-0.11.tar.gz", "has_sig": false, "md5_digest": "31606d82c499084e2b6d93aa3e9f6e84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8352, "upload_time": "2015-10-03T07:22:33", "url": "https://files.pythonhosted.org/packages/a9/f7/27f7a7ef90cc64703a24a4aa6bf6ddb939520f99e4a297a5ae23281c42a4/twintrimmer-0.11.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "249fa59c5e0da67d544e0f8ce564a9ab", "sha256": "2e9ea9025d558705091abc0f3a39ee0d695d30407fe532b7b7e9e57add0d97f3" }, "downloads": -1, "filename": "twintrimmer-0.12.tar.gz", "has_sig": false, "md5_digest": "249fa59c5e0da67d544e0f8ce564a9ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8121, "upload_time": "2015-10-07T06:12:12", "url": "https://files.pythonhosted.org/packages/46/50/0ab770e571e99b7e0536cc12df1b16d7d5e06fb0631681687df22527c140/twintrimmer-0.12.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "003d9d5e3ed829492afb03bc47a0746c", "sha256": "8b42c9cf4152598f0bd6514ba790108a2f9d45e079a352913665e0a40518693c" }, "downloads": -1, "filename": "twintrimmer-0.12.1.tar.gz", "has_sig": false, "md5_digest": "003d9d5e3ed829492afb03bc47a0746c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8133, "upload_time": "2015-10-10T20:51:15", "url": "https://files.pythonhosted.org/packages/d8/7e/0fb6cbef726e583fb23a11cb2b669d7962b2c50679138431f6f68d5a097c/twintrimmer-0.12.1.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "09c15fac69f96465fae2acbd25bc5fb6", "sha256": "80d34f84eb0956e0db95e7244f420bdb437be6ad0e6244a812d6b30c0c36b875" }, "downloads": -1, "filename": "twintrimmer-0.13.tar.gz", "has_sig": false, "md5_digest": "09c15fac69f96465fae2acbd25bc5fb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9606, "upload_time": "2015-12-11T15:22:39", "url": "https://files.pythonhosted.org/packages/fe/2c/f8e76c8cee90f26daf419ef4af3860923b893a8abbb2220a091d3b1f4a17/twintrimmer-0.13.tar.gz" } ], "0.14": [ { "comment_text": "", "digests": { "md5": "38ca36221f3174d9d5bcb0bf9d056679", "sha256": "e9c32c37dbb89de943a63201e7e48849178323163fe8f5e59410c82e53048b00" }, "downloads": -1, "filename": "twintrimmer-0.14.tar.gz", "has_sig": false, "md5_digest": "38ca36221f3174d9d5bcb0bf9d056679", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9831, "upload_time": "2015-12-11T18:40:57", "url": "https://files.pythonhosted.org/packages/1e/a2/aec17560bc5afef9518e649ee871fe0846285b1dc177cdf202a7b0cfe011/twintrimmer-0.14.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "e1d3cafa95c2eaf6984c6edf02d84fac", "sha256": "7558bb4aef3e2f610bb180462a4a2900758516c06dd9ef90b009b5fd3b94a0a0" }, "downloads": -1, "filename": "twintrimmer-0.2.tar.gz", "has_sig": false, "md5_digest": "e1d3cafa95c2eaf6984c6edf02d84fac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4008, "upload_time": "2015-06-27T06:34:24", "url": "https://files.pythonhosted.org/packages/b1/38/ca2d059a2f84703bc6085840b7584a58a16a240b81696e1e85709eb9560e/twintrimmer-0.2.tar.gz" } ], "0.4": [], "0.5": [ { "comment_text": "", "digests": { "md5": "f9868085bfd785195777337dc0ff7142", "sha256": "0abc8c7945b03a888ccdcb9cb19971d8089f083d0d195be73acfc548a369b6bb" }, "downloads": -1, "filename": "twintrimmer-0.5.tar.gz", "has_sig": false, "md5_digest": "f9868085bfd785195777337dc0ff7142", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4499, "upload_time": "2015-07-10T23:48:54", "url": "https://files.pythonhosted.org/packages/da/8d/0d2cd2ad255047af66693e3681614945764a5a1367f5995cd0933f7732ec/twintrimmer-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "26c2da064a3c60e732d40b3a3521458b", "sha256": "9987e23198b2961852f653936904f76d2207f00b7532f62a6cfa16b34ab99724" }, "downloads": -1, "filename": "twintrimmer-0.6.tar.gz", "has_sig": false, "md5_digest": "26c2da064a3c60e732d40b3a3521458b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4788, "upload_time": "2015-08-11T04:19:53", "url": "https://files.pythonhosted.org/packages/9e/49/b417dab66381f88ae9439c29d6ce599b055591157e306abc6e85d5c683d4/twintrimmer-0.6.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "94fe9b77ad8b38a6bac0f7d08e0e09d8", "sha256": "7524755cd549a91bacdab0b1622904ff14d41cc927898fdc9c136cdcdabdb1fd" }, "downloads": -1, "filename": "twintrimmer-0.9.1.tar.gz", "has_sig": false, "md5_digest": "94fe9b77ad8b38a6bac0f7d08e0e09d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8081, "upload_time": "2015-08-18T04:59:00", "url": "https://files.pythonhosted.org/packages/40/58/dec716ed8d98fb59d6eba62819de722c4ad978817762551d9d081344818c/twintrimmer-0.9.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "38ca36221f3174d9d5bcb0bf9d056679", "sha256": "e9c32c37dbb89de943a63201e7e48849178323163fe8f5e59410c82e53048b00" }, "downloads": -1, "filename": "twintrimmer-0.14.tar.gz", "has_sig": false, "md5_digest": "38ca36221f3174d9d5bcb0bf9d056679", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9831, "upload_time": "2015-12-11T18:40:57", "url": "https://files.pythonhosted.org/packages/1e/a2/aec17560bc5afef9518e649ee871fe0846285b1dc177cdf202a7b0cfe011/twintrimmer-0.14.tar.gz" } ] }