You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.6 KiB
Python

#!/usr/bin/env python3
# Copy unseen files
import sys
if sys.version_info < (3, 3):
sys.stderr.write("Sorry, requires at least Python 3.3\n")
sys.exit(1)
import argparse
import collections
import os
import pickle
import shlex
import shutil
def read_seen():
global seen
try:
with open(os.path.expanduser('~/.local/share/cp-unseen/seen.pickle'), 'rb') as f:
seen = pickle.load(f)
except FileNotFoundError:
seen = set()
def save_seen():
global seen
if not os.path.exists(os.path.expanduser('~/.local/share/cp-unseen')):
os.mkdir(os.path.expanduser('~/.local/share/cp-unseen'))
with open(os.path.expanduser('~/.local/share/cp-unseen/seen.pickle'), 'wb') as f:
pickle.dump(seen, f)
def main():
global seen, drive
parser = argparse.ArgumentParser(
description='Copy unseen files')
parser.add_argument('folder', type=str, help='folder to copy from')
# XXX folder to copy *to*!
args = parser.parse_args()
read_seen()
file_list = [os.path.join(dp, f) \
for dp, _, filenames in os.walk(args.folder) \
for f in filenames]
for file1 in file_list:
if file1.endswith('.lock') or '.sync/' in file1:
continue
if file1 in seen:
continue
local_filename = os.path.basename(file1)
if not os.path.exists(local_filename):
print(file1)
shutil.copy(file1, local_filename)
seen.add(file1)
save_seen()
else:
print("{} exists locally!".format(shlex.quote(local_filename)))
sys.exit(2)
main()
# vim:tw=100: