cmd/inputrename.py

42 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_generator('.') 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:
print(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
def main(argv):
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('keyword')
parser.add_argument('--recurse', dest='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:]))