コード例 #1
0
def sync_dir():
    "Sync source dir with dest dir"
    LOG.warning('Start sync dir ...')
    # Launch database connection
    with Db(db_name='sync',
            db_file='%s/db.json' % ARGS.target,
            dry_run=DRY_RUN,
            safe_dump=True) as db:
        # For each files
        for dir_path, dirs, files in os.walk(ARGS.source):
            if not files: continue
            # For each files in dir
            for file_name in files:
                # Filter db file
                if (file_name == 'db.json'
                    or file_name == 'db.json.orig'):
                    continue
                # Exemple : -s Video/foo -t dest
                # Give : src = Video/foo : relative = foo : dst = dest/foo
                dir_source      = dir_path
                dir_relative    = re.sub(r'%s/?' % ARGS.source,'', dir_source)
                dir_dest        = join(ARGS.target, dir_relative)
                file_source     = join(dir_source, file_name)
                file_relative   = join(dir_relative, file_name)
                file_dest       = join(dir_dest, file_name)
    
                if db.get(file_relative) is None:
                    if is_include(file_relative) \
                    or not is_exclude(file_relative):
                        create_dir(dir_dest, dry_run=DRY_RUN)
                        try:
                            copy_file(file_source, file_dest, dry_run=DRY_RUN)
                        except IOError as error:
                            LOG.critical("Error can't copy file %s : %s"
                                         % (file_dest, error))
                        if check_file_consistency(file_source, file_dest, dry_run=DRY_RUN):
                            db.save(file_relative, 'unused')
                        else:
                            LOG.critical("Error file is not consistent "
                                         "the sum don't match")
        # Clean empty dir after sync
        remove_empty_dir(ARGS.target, dry_run=DRY_RUN)
コード例 #2
0
            name = k.encode('utf-8')
            matched = re.match(regex, name)
            if matched is not None:
                _buffer.append(name)
                print " - %s" % (name)
    
        choice = raw_input('Realy want to delete there files y/N:')
        if choice == 'y':
            for name in _buffer:
                db.remove(name)


if __name__ == "__main__":

    # Create target dir
    create_dir(ARGS.target, dry_run=DRY_RUN)
    # List exclude
    if ARGS.list_exclude:
        list_exclude()
    # List include
    elif ARGS.list_include:
        list_include()
    # Add exclude
    elif ARGS.add_exclude:
        add_exclude()
    # Del exclude
    elif ARGS.del_exclude:
        del_exclude()
    # Add include
    elif ARGS.add_include:
        add_include()