A cross-platform module for file operations based on time.
Project description
timefops
Performs file operations (moving, copying and archiving) on files/directories based on their access/change/modified times.
Description
timefops provides moving, copying and archiving capabilities for files/directories based on their access time, change time or modified time.
The interface contains nested sub-parsers where you'll be required to choose the time predicate and operation. Both the copying and moving functionality utilize Python's shutil
module, whereas thetarfile
and zipfile
modules are both used for creating archives.
Platforms: Linux, Windows; compatibilty with Mac OS is unknown.
Python 3.7+ is required.
Installation
Using pipx (recommended):
pipx install timefops
Using pip:
pip3 install --user timefops
Usage
Choosing the time predicate:
stiftcast@debian:~$ timefops -h
usage: timefops [-h] [-V] <time> ...
Operate on files/directories based on their access/change/modified times.
optional arguments:
-h, --help show this help message and exit
-V, --version print version number/info and exit
Time predicate:
<time>
atime Perform operations based on last access-time.
ctime Perform operations based on last change-time.
mtime Perform operations based on last modification-time.
Choosing the operation:
stiftcast@debian:~$ timefops mtime -h
usage: timefops mtime [-h] [-V] <operation> ...
Perform operations based on last modification-time.
optional arguments:
-h, --help show this help message and exit
-V, --version print version number/info and exit
Operations:
<operation>
archive Archive contents to a tarball or a zip file.
copy Copy contents to a different location.
move Move contents to a different location.
Options for archive
:
optional arguments:
-h, --help show this help message and exit
-V, --version print version number/info and exit
General arguments:
src Source directories/files.
-a NAME, --archive NAME
Name for target archive.
--to-stdout Write tar archive or zip file to stdout instead of a
named file, emulates the '-' option of the tar and zip
executables.
-z, --zipfile Makes a zip file instead of a tar archive (GZ
compression is not available with this option)
-c {bz2,gz,xz}, --compression {bz2,gz,xz}
Compression format for the archive.
-f FORMAT [FORMAT ...], --format FORMAT [FORMAT ...]
Set folder name format (using Python's datetime
formatting directives). If there are multiple values
specifed, contents will get nested under the last
value.
-i, --individual-items
Setting this flag will allow for specifying individual
source files and folders. The difference between
specifiying a source folder with this flag on is that
any folder(s) specified will not be traversed and
instead be treated as a standalone item.
-v, --verbose Set log level to verbose.
-d, --debug Set log level to debug (includes verbose).
--no-color, --no-colour
Disable coloured logging output.
--dry-run Show results, but don't execute.
AES-Encrypted Zipfile options:
Arguments for making a password-protected AES-Encrypted zip file. The
-z/--zipfile flag is required for any of these to register, otherwise they
will be ignored. Encrypting a zip file will not hide the directory
structure, or encrypt any directories, but will encrypt individual files.
--zip-password, -zp Prompts for a password to encrypt zip folder contents
with.
--zip-password-plaintext PASSWORD, -zP PASSWORD
Specify zip file password in plaintext, avoid this
option if possible.
--zip-encryption {weak,medium,strong}, -ze {weak,medium,strong}
Set the strength of the AES encryption, if nothing is
specified, 'medium' is used by default.
Options for copy
or move
:
optional arguments:
-h, --help show this help message and exit
-V, --version print version number/info and exit
General arguments:
src Source directories/files.
-t TARGET_DIRECTORY, --target-directory TARGET_DIRECTORY
Destination directory.
-f FORMAT [FORMAT ...], --format FORMAT [FORMAT ...]
Set folder name format (using Python's datetime
formatting directives). If there are multiple values
specifed, contents will get nested under the last
value.
-i, --individual-items
Setting this flag will allow for specifying individual
source files and folders. The difference between
specifiying a source folder with this flag on is that
any folder(s) specified will not be traversed and
instead be treated as a standalone item.
-v, --verbose Set log level to verbose.
-d, --debug Set log level to debug (includes verbose).
--no-color, --no-colour
Disable coloured logging output.
--dry-run Show results, but don't execute.
Examples
The provided commands can either be used on their own, or with the find
and xargs
commands in tandem. The latter is the recommended method, due to find's powerful filtering options.
Standalone
Traverse through multiple directories and copy the contents somewhere, sorted by access-time:
timefops atime copy dir1/ dir2/ dir3/ -t /dest/path
Archive all the files and folders specified as is into a .tar.bz2 archive, sorted by modified-time:
timefops mtime archive file1 dir1/ dir2/ file2 -i -a standalone_example -c bz2
Using find
and xargs
Find files accessed within the last hour and move them somewhere into folders with the 12-hour time, sorted by accessed-time:
find ./ -type f -amin -60 -print0 | xargs -0 timefops atime move -f "%I:%M%p" -i -t /dest/path
Find all shell scripts and put them in a gzip-compressed tar archive, sorted by changed-time:
find ./ -type f -iname "*.sh" -print0 | xargs -0 timefops ctime archive -i -a ex_archive -c gz
Get directories that were modified between April 1, 2020 - April 30, 2020 and copy them somewhere, sorted by modified-time:
find ./ -type d -newermt 2020-04-01 ! -newermt 2020-04-30 -prune -print0 | \
xargs -0 timefops mtime copy -i -t /dest/path
Specify directories to be traversed (-i flag is omitted) and copy the contents inside to somewhere, sorted by modified-time:
find ./ -type d \( -iname 'pat1' -o -iname 'pat2' \) -prune -print0 | \
xargs -0 timefops mtime copy -t /dest/path
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file timefops-0.3.tar.gz
.
File metadata
- Download URL: timefops-0.3.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b1d45ef04ebc09f3cf27ee1c41df63e8d73faff93b24c3ef0d60ee05a5f06df7 |
|
MD5 | 1060c71493967215149492f6a8e01f01 |
|
BLAKE2b-256 | d48d2d867dd43162555e166fe4684d96af4d32e6f1995dfc08d5ab4a4667ec66 |
File details
Details for the file timefops-0.3-py3-none-any.whl
.
File metadata
- Download URL: timefops-0.3-py3-none-any.whl
- Upload date:
- Size: 24.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c17f3d9efa283f30f988abcb003eeed3d7a2654b78824144be7ed7df02c330b8 |
|
MD5 | 49e392438924c799539531a1e645a9f0 |
|
BLAKE2b-256 | b31e8a3078c7c91617fec4a492716ca7d174f4ef07e10acb1c3fc66d1363c645 |