]> Sergey Matveev's repositories - stargrave-blog.git/commitdiff
Поиск в find
authorSergey Matveev <stargrave@stargrave.org>
Thu, 27 Apr 2023 20:09:21 +0000 (23:09 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 27 Apr 2023 20:09:21 +0000 (23:09 +0300)
https://marc.info/?l=freebsd-current&m=168176556429526&w=2
Неожиданное поведение обнаружили у find, в зависимости от локали:

    $ touch FOO
    $ touch bar
    $ env LANG=C.UTF-8 find . -name '[A-Z]*' -print
    ./FOO
    $ env LANG=en_US.UTF-8 find . -name '[A-Z]*' -print
    ./FOO
    ./bar

Говорят, что надо использовать классы символов:

    $ LANG=en_US.UTF-8 find . -name '[[:alpha:]]*' -print
    ./BAR
    ./foo
    $ LANG=en_US.UTF-8 find . -name '[[:lower:]]*' -print
    ./foo

Вот правда в FreeBSD find их не понимает для -name. Но можно для -regex:

    $ LANG=en_US.UTF-8 find -E /etc/rc.d -regex '.*[[:upper:]]+' -print
    /etc/rc.d/NETWORKING
    /etc/rc.d/FILESYSTEMS
    /etc/rc.d/SERVERS
    /etc/rc.d/DAEMON
    /etc/rc.d/LOGIN


No differences found