Update move_all.py.

master
voussoir 2020-12-09 07:17:48 -08:00
parent 4cf47d7d94
commit d3392ef3a8
1 changed files with 40 additions and 17 deletions

View File

@ -2,29 +2,52 @@
Move all of the files into the destination directory, aborting the operation if Move all of the files into the destination directory, aborting the operation if
even a single file collides with a file in the destination. even a single file collides with a file in the destination.
''' '''
import sys import argparse
import shutil import shutil
import sys
from voussoirkit import pathclass from voussoirkit import pathclass
from voussoirkit import pipeable
from voussoirkit import winglob from voussoirkit import winglob
argv = sys.argv[1:] def moveall_argparse(args):
files = (
pathclass.Path(file)
for pattern in pipeable.input(args.source)
for file in winglob.glob(pattern)
)
destination = pathclass.Path(args.destination)
if len(argv) < 2: if not destination.is_dir:
raise TypeError() pipeable.stderr('destination must be a directory.')
return 1
patterns = argv[:-1] pairs = []
files = [file for pattern in patterns for file in winglob.glob(pattern)] fail = False
files = [pathclass.Path(file) for file in files] for file in files:
destination = pathclass.Path(sys.argv[-1]) new_path = destination.with_child(file.basename)
if not destination.is_dir: if new_path.exists:
raise TypeError(destination) pipeable.stderr(f'{file.basename} cannot be moved.')
fail = True
continue
pairs.append((file, new_path))
for file in files: if fail:
if destination.with_child(file.basename).exists: return 1
raise Exception(file.basename)
for file in files: for (file, new_path) in pairs:
new_path = destination.with_child(file.basename) pipeable.output(new_path.absolute_path)
print(new_path.absolute_path) shutil.move(file.absolute_path, new_path.absolute_path)
shutil.move(file.absolute_path, new_path.absolute_path)
def main(argv):
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('source')
parser.add_argument('destination')
parser.set_defaults(func=moveall_argparse)
args = parser.parse_args(argv)
return args.func(args)
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))