43 lines
1.5 KiB
Python
Executable File
43 lines
1.5 KiB
Python
Executable File
#!/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('--allow', '-a', type=str, nargs='?', action='append',
|
|
help='Specify a special character to allow (it will not be removed).')
|
|
parser.add_argument('--whitelist', '-w', type=str,
|
|
help='Overwrite default whitelist (format: whitespace separated string).')
|
|
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 = {' ', '.', '-'}
|
|
if args.whitelist: whitelist = set(args.whitelist.split())
|
|
|
|
whitelist.add(args.separator)
|
|
if args.allow: whitelist = whitelist.union(set(args.allow))
|
|
|
|
|
|
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)
|
|
)
|
|
))
|