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:
raise TypeError()
patterns = argv[:-1]
files = [file for pattern in patterns for file in winglob.glob(pattern)]
files = [pathclass.Path(file) for file in files]
destination = pathclass.Path(sys.argv[-1])
if not destination.is_dir: if not destination.is_dir:
raise TypeError(destination) pipeable.stderr('destination must be a directory.')
return 1
for file in files:
if destination.with_child(file.basename).exists:
raise Exception(file.basename)
pairs = []
fail = False
for file in files: for file in files:
new_path = destination.with_child(file.basename) new_path = destination.with_child(file.basename)
print(new_path.absolute_path) if new_path.exists:
pipeable.stderr(f'{file.basename} cannot be moved.')
fail = True
continue
pairs.append((file, new_path))
if fail:
return 1
for (file, new_path) in pairs:
pipeable.output(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:]))