diff options
Diffstat (limited to 'generate.py')
-rwxr-xr-x | generate.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/generate.py b/generate.py new file mode 100755 index 0000000..49ed27f --- /dev/null +++ b/generate.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# Startdate: 2021-01-29 15:35 +# Purpose: generate symlink forest of a directory path +# methodology: +# 1. read exif data first, YYYY/MM +# 2. use timestamp of file, and log warnings +# Usage: +# ./generate.py -i /mnt/bgstack15/Backups/bgstack15/Images/Photos/camera/2018/ -o /mnt/public/www/gallery/my2018 -n -d2 -x 'October' -s --nr + +from argparse import ArgumentParser +from genlib import * +generate_version="2021-01-29a" + +# WORKHERE the if __main__ thing: +parser = ArgumentParser(description="Make symlink forest for images") # epilog="something" +parser.add_argument("-d","--debug",nargs='?', default=0, type=int, choices=range(0,11), help="Set debug level") +parser.add_argument("-v","--version", action="version", version="%(prog)s " + generate_version) +g_dryrun = parser.add_mutually_exclusive_group() +g_dryrun.add_argument("-n","--dryrun", action="store_true", help="Make no changes (default)") +g_dryrun.add_argument("-a","--apply", action="store_true", help="Actually make changes") +g_zeropad = parser.add_mutually_exclusive_group() +g_zeropad.add_argument("-z","-0","--zeropad",action="store_true", help="Zero pad month directories (default)") +g_zeropad.add_argument("--nz","--nozeropad","--no-zeropad",action="store_true", help="Do not zero pad") +g_action = parser.add_mutually_exclusive_group() +g_action.add_argument("-c","--copy", action="store_true", help="Copy files instead of symlinks. Not recommended.") +g_action.add_argument("-s","--symlink", action="store_true", help="Make symlinks (default)") +g_action.add_argument("-m","--move", action="store_true", help="Move files. Not recommended.") +g_relative = parser.add_mutually_exclusive_group() +g_relative.add_argument("-r","--relative", action="store_true",help="Make relative symlinks if possible.") +g_relative.add_argument("--nr","--norelative","--no-relative", action="store_true",help="Make absolute symlinks (default)") +parser.add_argument("-i","--indir",required=True) +parser.add_argument("-o","--outdir",required=True) +parser.add_argument("-x","--exclude",action="append",help="Exclude pathname matches. Can be used multiple times.") + +# pull useful values out of the argparse entry +args = parser.parse_args() +debuglevel=0 +if args.debug is None: + debuglevel = 10 +elif args.debug: + debuglevel = args.debug +indir = args.indir +outdir = args.outdir +dryrun = args.dryrun or not args.apply # the mutually exclusive group handles this OK +eprint(args) +zero_pad = args.zeropad or not args.nz +if args.copy: + action = "copy" +elif args.symlink: + action = "symlink" +elif args.move: + action = "move" +relative_symlinks = not (not args.relative or args.nr) +excludes = [] +try: + for i in args.exclude: + excludes.append(i) +except: + # no exclusions + pass + +if debuglevel >= 10: + eprint(args) + if len(excludes) > 0: + eprint("Excluding path matches:", excludes) + +# MAIN +these_files = limit( + list_files( + indir, + debuglevel=debuglevel, + excludes=excludes + ), + ["image","video"] + ) + +print("FOUND FILE COUNT:",len(these_files)) +make_YM_forest( + outdir, + these_files, + action = action, + dryrun = dryrun, + debuglevel = debuglevel, + zero_pad = zero_pad, + relative_symlinks = relative_symlinks + ) |