#!/usr/bin/env python3 from sys import argv from subprocess import run, PIPE, DEVNULL from os import path srcimg = 'SourceForEmulator.dmg' rsync_opts = [ '--exclude', '.*', # Down with dotfiles. '--exclude', srcimg, '--exclude', 'Desktop DB', '--exclude', 'Desktop DF', '--exclude', 'Desktop Folder', '--exclude', 'Trash', '--exclude', 'TheVolumeSettingsFolder', '--exclude', 'TheFindByContentFolder', '--recursive', '-tX', # consider times and xattrs '--delete', # may delete things on the vMac drive # '--itemize-changes', ] cmdresult = run(['hdiutil', 'attach', '-nobrowse', srcimg], stdout=PIPE, check=True).stdout.decode('ascii') mountpoint = next(x for x in cmdresult.split() if x.startswith('/') and not x.startswith('/dev')) try: mountpoint = mountpoint.rstrip('/') # try to deal in clean paths run(['rsync', *rsync_opts, mountpoint+'/', './'], check=True) finally: run(['hdiutil', 'detach', mountpoint], stdout=DEVNULL, check=True)