find . -type f | grep -i '[^a-z0-9\.\/_\-]'
Это будет соответствовать всем файлам, которые содержат символы, отличные от a-z
, 0-9
, точку, косую черту (для каталогов), подчеркивание или дефис-минус.
Примечание. Это не будет работать, если файл (или путь) содержит символ новой строки, потому что при передаче по grep
путь к файлу будет разделен на две части. Хотя это не очень распространено, это следует упомянуть.
Простое решение с помощью Zsh (для этого требуется setopt EXTENDED_GLOB
):
ls -l **/*[^a-zA-Z0-9-_.]##*
**
возвращается в каталоги, а *
соответствует нулю или более вхождений любого символа. Отрицательный шаблон символов из белого списка должен совпадать хотя бы один раз (##
).