I did some research looking for an existing program but did not find one that matched what I want to build.
IMHO, anything that isn’t in Rust or C/C++ is going to be too high level and not detect an important set of problems.
notox - Rust, a command line utility that reports (and optionally fixes) toxic file names
ls-lint - Go, focused on file name conventions (source). It has a Github Action and an npm package.
pre-commit-hooks - Python, includes some file name checks (check-case-conflict is especially interesting). The overall pre-commit framework should be supported by namelint.
detox - C, renames files to make them easier to work with under Linux and other Unix-like operating systems
eslint-plugin-check-file - JavaScript, tests files in directories against one or more patterns (source)
eslint-plugin-unicorn’s filename-case - JavaScript, enforces file name case style
eslint-plugin-filenames - JavaScript, focused on file naming conventions, last updated in 2018 but still used (source)
batista/lint-filenames - JavaScript, tests a single regex against all files in a directory
Rich Jenks’ filename regex - a regex that tests for cross-plaform issues (including safe for URLs)
sindresorhus/filename-reserved-regex - NPM library with regexes for reserved characters and MS-DOS reserved names. Used in sindresorhus/filenamify and sindresorhus/valid-filename.
filesan - Rust, a library that sanitizes strings so they can safely be used as file names. I.e. if someone gives you a string as a file name, this will make sure it is safe.
super-linter - a meta-linter that runs other linters. It has a huge list of available linters, but all are focused on file contents, not names.
@another_works/namelint - JavaScript, test file names and internal names against a user-supplied regex.
dougpuob/cppnamelint - C++, check C++ source for file, function, variable and parameter names.
joshwnj/name-lint - JavaScript, regex rule per file extension, last updated in 2019
CrossRename - Python, focused on portability between Linux and Windows (source)
flytam/filenamify - Go, focused on creating portable file names
spf13/pathologize - Go, focused on creating portable file names
ClaireCJS/fix_unicode_filenames - Python, renames files with Unicode and/or troublesome characters
cfgong/filename-standardizer - bash script to change case style of files/directories
exponential-decay/fndec - Go, guess the character encoding of your filenames, last updated in 2018. I’m a little worried that this exists, since we are planning on only supporting UTF-8…
jonthysell/AsciiRename - C, renames everything to ASCII