63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
'''
|
|
directory_discrepancy
|
|
=====================
|
|
|
|
This program compares two directory and shows which files exist in each
|
|
directory that do not exist in the other.
|
|
|
|
> directory_discrepancy dir1 dir2
|
|
|
|
flags:
|
|
--recurse:
|
|
Also check subdirectories.
|
|
'''
|
|
import os
|
|
import argparse
|
|
import sys
|
|
|
|
from voussoirkit import betterhelp
|
|
from voussoirkit import pathclass
|
|
from voussoirkit import operatornotify
|
|
from voussoirkit import spinal
|
|
from voussoirkit import vlogging
|
|
|
|
log = vlogging.getLogger(__name__, 'directory_discrepancy')
|
|
|
|
def helper(root, recurse):
|
|
root = pathclass.Path(root)
|
|
walk = spinal.walk(root, recurse=recurse, yield_directories=True, yield_files=True)
|
|
for path in walk:
|
|
relative = path.relative_to(root)
|
|
yield relative
|
|
|
|
def directory_discrepancy_argparse(args):
|
|
files1 = set(helper(args.dir1, recurse=args.recurse))
|
|
files2 = set(helper(args.dir2, recurse=args.recurse))
|
|
|
|
print(f'In "{args.dir1}" but not in "{args.dir2}":')
|
|
print('=============================')
|
|
for discrepancy in sorted(files1.difference(files2)):
|
|
print(discrepancy)
|
|
|
|
print()
|
|
|
|
print(f'In "{args.dir2}" but not in "{args.dir1}":')
|
|
print('=============================')
|
|
for discrepancy in sorted(files2.difference(files1)):
|
|
print(discrepancy)
|
|
|
|
|
|
def main(argv):
|
|
argv = vlogging.set_level_by_argv(log, argv)
|
|
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
|
|
parser.add_argument('dir1')
|
|
parser.add_argument('dir2')
|
|
parser.add_argument('--recurse', action='store_true')
|
|
parser.set_defaults(func=directory_discrepancy_argparse)
|
|
|
|
return betterhelp.single_main(argv, parser, __doc__)
|
|
|
|
if __name__ == '__main__':
|
|
raise SystemExit(main(sys.argv[1:]))
|