Я попытался пометить поздно на вопрос, похожий на мой на stackoverflow (найти не UTF8 имена файлов на файловой системе Linux) для получения дальнейших ответов, пока не повезло, так что здесь идет снова...
у меня та же проблема, что и OP в ссылке выше, и convmv-отличный инструмент для исправления собственной файловой системы. Поэтому мой вопрос является академическим, но я считаю его неудовлетворительным (на самом деле я не могу поверить), что "найти" не может найти нестандартный ascii письмена.
есть ли кто-нибудь, кто знал бы, какую комбинацию параметров использовать для поиска имен файлов, которые содержат нестандартные символы на том, что кажется unicode FS, в моем случае символы кажутся 8bits extended ascii, а не unicode, файлы поступают из машины Windows (iso-8859-1), и мне регулярно нужно их получать. Я хотел бы посмотреть, как find и/или grep могут сделать то же самое, что и convmv.
файлы примеров:
> ls
Abc�def ÉÈéèáà-rest everest éverest
> ls -b
Abc1def ÉÈéèáà-rest everest éverest
первый файл приходит из Windows (или моделируется с помощью touch $(printf "AbcxA9def")
).
> 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, 251 или o251 не удается (совпадений нет).
> ls | fgrep e
Abc�def
ÉÈéèáà-rest
everest
éverest
Ищу не спорный персонаж показывает все файлы с grep, как я и ожидал.
> find . -regex '.*e.*'
./éverest
./ÉÈéèáà-rest
./everest
> find . -name '*e*'
./éverest
./ÉÈéèáà-rest
./everest
find, однако, является очень дискриминационным: даже глядя на нормальный символ, мне кажется, что он устраняет имена файлов, которые содержат символы вне диапазона допустимых символов для схемы кодирования имен файловой системы.
насколько я могу судить, если файл находится в файловой системе, то find должен найти его, верно? Но, может быть, есть функция, о которой я не знаю?
любые идеи были бы очень признательны.