Skip to content

Instantly share code, notes, and snippets.

@mgax
Created March 25, 2009 16:29
Show Gist options
  • Save mgax/85561 to your computer and use it in GitHub Desktop.
Save mgax/85561 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# recursively back up a folder using hard links
# Alex Morega, Eau de Web
import os
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-n", "--dry-run", action="store_true", dest="dry_run", default=False,
help="don't do any backup, just display what would be linked")
parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
def backup(folder, filename, dst, verbose=True, dry_run=False):
destfolder = os.path.join(dst, folder)
srcpath = os.path.join(folder, filename)
dstpath = os.path.join(destfolder, filename)
if verbose:
print '%s -> %s' % (srcpath, dstpath)
if not dry_run:
if not os.path.isdir(destfolder):
os.makedirs(destfolder)
os.link(srcpath, dstpath)
if __name__ == '__main__':
(options, args) = parser.parse_args()
if len(args) != 2:
raise ValueError('2 arguments required')
src, dst = args
src = os.path.abspath(src)
dst = os.path.abspath(dst)
os.chdir(src)
for root, dirs, files in os.walk('.'):
for f in files:
backup(root[2:], f, dst, verbose=options.verbose, dry_run=options.dry_run)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment