#!/usr/bin/env python3 from unidecode import unidecode from os import rename from os.path import basename, dirname from os.path import join as joinpath from argparse import ArgumentParser parser = ArgumentParser(description='Eliminate funky stuff from filenames.') parser.add_argument('--separator', '-s', type=str, nargs='?', default='_', help='Set separator to use (to replace spaces with).') parser.add_argument('files', type=str, nargs='+', help='File(s) to normalise the name of (relative or absolute path).') args = parser.parse_args() # special characters that will not be removed whitelist = {' ', '.', '-'} whitelist.add(args.separator) for path in args.files: dir = dirname(path) file = basename(path) rename(path, unidecode ( joinpath ( dir, ''.join(ch for ch in file.replace(' ', args.separator) if ch.isalnum() or ch in whitelist) ) ))