#!/usr/bin/env python
"""
Recursively checks all filenames of a given directory.
In case an unwanted character is found, the filename is printed to stdout.
"""
__date__="2011-07-17"
__author__="Gernot WALZL"
MAX_LENGTH=64 # In Joliet each path component can be up to 64 characters long.
import sys
import os
import re
def print_usage():
print("Usage:")
print("check_filenames.py PATH")
def is_valid_name(name):
if len(name) > MAX_LENGTH:
return False
pattern = "\A[a-zA-Z0-9_ $\-\.]+\Z"
if re.match(pattern, name) != None:
return True
return False
def check_filenames(path="."):
names = os.listdir(path)
names.sort()
for name in names:
if not is_valid_name(name):
print(path+os.sep+name)
if os.path.isdir(path+os.sep+name):
check_filenames(path+os.sep+name)
if __name__=="__main__":
if len(sys.argv) <= 1:
print_usage()
sys.exit(1)
path = sys.argv[1]
if path[-1] == os.sep:
path = path[0:len(path)-1]
if not os.path.isdir(path):
print_usage()
sys.exit(1)
check_filenames(path)