cmd/inputrename.py
Ethan Dalool 4a9051e617
Big migrations and linting.
With pathclass.glob_many, we can clean up and feel more confident
about many programs that use pipeable to take glob patterns.

Added return 0 to all programs that didn't have it, so we have
consistent and explicit command line return values.

Other linting and whitespace.
2021-09-23 23:42:45 -07:00

43 lines
1.2 KiB
Python

'''
Given a target string to replace, rename files by prompting the user for input.
'''
import argparse
import os
import sys
from voussoirkit import pathclass
from voussoirkit import pipeable
from voussoirkit import spinal
@pipeable.ctrlc_return1
def inputrename_argparse(args):
if args.recurse:
files = (file for file in spinal.walk('.') if args.keyword in file.basename)
else:
files = (file for file in pathclass.cwd().listdir() if args.keyword in file.basename)
prev = None
for file in files:
pipeable.stderr(file.relative_path)
this = input('> ')
if this == '' and prev is not None:
this = prev
if this:
new_name = file.basename.replace(args.keyword, this)
new_name = file.parent.with_child(new_name)
os.rename(file.absolute_path, new_name.absolute_path)
prev = this
return 0
def main(argv):
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('keyword')
parser.add_argument('--recurse', action='store_true')
parser.set_defaults(func=inputrename_argparse)
args = parser.parse_args(argv)
return args.func(args)
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))