Вот что я приготовил и в чем застрял:
find / \! -name "*[:alnum:]*" -type f -ls > ~/Desktop/files_not-allowed-char.txt
Я действительно хочу перечислить все файлы, содержащие один из этих символов:
\ / : * ? " < > |
Наоборот: я хочу перечислить все файлы, в имени которых есть другие символы, кроме:
[A-Z][a-z][0-9]äöüÄÖÜß_-.()#[]
or in other "words":
[:alnum:] and "äöüÄÖÜß_-.()#[]"
Я надеюсь, что смогу уточнить свои пожелания. Я вхожу на неизвестную территорию ...
Заранее спасибо!
Справочная информация: я хочу перейти с AFP на SMB, но должен убедиться, что я переименовал все недопустимые имена файлов и папок (например, invalid_Directory_Name./
).
С помощью ! Впереди "[: alnum:]"инвертирует любой файл, имеющий символ в [: alnum:], поэтому он будет соответствовать только именам файлов, которые ТОЛЬКО не содержат буквенно-цифровых символов.
Вы можете использовать другое регулярное выражение для поиска знаков препинания find . -name "*[:punct:]"
но это включает персонажей, которые вам не интересны. find . -name "*[\/:*?"<>|]*"
должен соответствовать чему-либо, у кого есть хотя бы один из этих символов в скобках. (хотя от некоторых из них, вероятно, нужно убежать :))