Я поздно попытался пометить вопрос, похожий на мой ( Найти имена файлов, отличные от UTF8, в файловой системе Linux ), чтобы получить дополнительные ответы, но пока безуспешно, так что здесь снова ...
У меня та же проблема, что и у OP по ссылке выше, и convmv - отличный инструмент для исправления собственной файловой системы.Поэтому мой вопрос академический, но я нахожу неудовлетворительным (на самом деле я не могу поверить), что 'find' не может найти нестандартные символы ascii.
Есть ли кто-нибудь, кто знал бы, какую комбинациюопций, которые можно использовать для поиска имен файлов, содержащих нестандартные символы на том, что похоже на Unicode FS, в моем случае символы кажутся расширенными ascii, а не unicode, на 8 битов, файлы приходят с компьютера Windows (iso-8859-1)и мне регулярно нужно их забирать.Мне бы хотелось посмотреть, как find и / или grep могут делать то же самое, что и convmv.
Образцы файлов:
> ls
Abc�def ÉÈéèáà-rest everest éverest
> ls -b
Abc\251def ÉÈéèáà-rest everest éverest
Первый файл поступает из Windows (или имитируется с помощью touch $(printf "Abc\xA9def")
).
> find . -regex '.*[^a-zA-Z./].*'
./ÉÈéèáà-rest
> ls | egrep '[^a-zA-Z]'
ÉÈéèáà-rest
Отсутствует почти все из них (дефис, сохранивший этот файл, можно увидеть с помощью цветного grep).Все, что здесь происходит, - это не то, что я ожидал: ни find, ни grep не в состоянии воспринимать акцентированное письмо как выходящее за пределы диапазона, предусмотренного [^ a-zA-Z ./].
> find . -regex '.*é.*'
./éverest
./ÉÈéèáà-rest
> ls | egrep 'é'
ÉÈéèáà-rest
éverest
> ls | egrep '[é]'
ÉÈéèáà-rest
éverest
> find . -regex '.*[é].*'
./éverest
./ÉÈéèáà-rest
Странно обаспособны подобрать стандартный акцент при наличии (в том числе в ассортименте).Любая попытка найти или grep с \ xA9, \ 0251 или \ o251 не удалась (без совпадения).
> ls | fgrep e
Abc�def
ÉÈéèáà-rest
everest
éverest
При поиске не противоречивого символа все файлы отображаются с grep, как я и ожидал.
> find . -regex '.*e.*'
./éverest
./ÉÈéèáà-rest
./everest
> find . -name '*e*'
./éverest
./ÉÈéèáà-rest
./everest
находка, однако, очень дискриминационная: даже при поиске нормального символа мне кажется, что он исключает имена файлов, которые содержат символы вне диапазона допустимых символов для схемы кодирования имен файловой системы.
Насколько я понимаю, если файл находится в файловой системе, тогда find должен его найти, верно?Но, может быть, есть такая особенность, о которой я не знаю?
Любые идеи будут очень признательны.