cleanfilenames/cleanfilenames.py
2024-10-25 18:27:24 +02:00

43 lines
1.4 KiB
Python
Executable file

#!/usr/bin/python3
import sys, re, os
errortxt = " /some/directory\nRenames _all_ strange filenames in a given directory. No other options, edit the source."
count = 0
# Check for one single commandlineparameter
try:
dirname = sys.argv[1]
except:
sys.exit(sys.argv[0] + errortxt)
# Regex to eliminate everything not belonging into a filename
# Ey, this is not zombiecode!
# whitelist = "[^a-z.A-Z0-9äöüÄÖÜß_+-]" # All trash eliminate
# whitelist = "[^a-z.A-Z0-9äöüÄÖÜß_+-][^a-z.A-Z0-9äöüÄÖÜß_+-]*" # Reduce trash to "-"
whitelist = "[^a-z.A-Z0-9äöüÄÖÜß_+-][^a-z.A-Z0-9äöüÄÖÜß_+-]*"
cutminus = "^-+"
# Open first commandline parameter as a directory
if os.path.isdir(dirname):
for filename in os.listdir(dirname):
tmpfilename = re.sub(whitelist, "-", filename)
# repair leading "-" and prepend a "0"
newfilename = re.sub(cutminus, "0-", tmpfilename)
# Test for already existing target
if os.path.exists(dirname + "/" + newfilename) == False:
# show what is happening
print("moving ", filename, " to ", newfilename)
os.rename(dirname + "/" + filename, dirname + "/" + newfilename)
count += 1
else:
print("Not overwriting existing file: ", newfilename)
# Not a directory - exit and say someting nasty
else:
sys.exit(sys.argv[0] + errortxt)
# Give a summary.
print("\n", count, " files renamed\n")