Сергей Супрунов
Не стесняйтесь искать
Поиск файлов – частая операция, если только вы не обладаете феноменальной
памятью или не поддерживаете все вверенные вам файлы в строгом порядке. Да и
вряд ли память вам поможет, если нужно будет найти системный файл, фигурирующий
в сообщении об ошибке какой-нибудь службы.
Эта небольшая подборка советов посвящена утилите find
– наиболее эффективному (но почему-то пугающему новичков) средству поиска и
«массовой обработки» файлов. Начну с нескольких простых примеров.
find ./ -name "milter-spa*"
Эта команда выведет список файлов, имена которых
соответствуют указанному шаблону, размещённых начиная с текущего каталога и
вглубь до победного конца. Обратите внимание на несколько нестандартный порядок
параметров вызова – сначала указывается начальный каталог поиска, а затем –
опции.
Если вы запустите эту команду от имени
непривилегированного пользователя в системном каталоге, то наверняка получите
массу сообщений типа:
find: ./backup/pgsql: Permission
denied
Избавиться от них поможет следующий приём:
find ./ -name "milter-spa*"
2>/dev/null
То есть сообщения об ошибках (2 – это дескриптор потока STDERR) мы просто
выкидываем, оставляя лишь нормальный вывод STDOUT.
find /home/serg/samag -mindepth
2 -maxdepth 2
А это будет список всех файлов, находящихся в
указанном каталоге непосредственно в его подкаталогах первого уровня. То есть
будут найдены файлы samag/jail/jail-wu и samag/python/test-map.py, но не samag/meta.tgz
(т.к. не в подкаталоге) и не samag/sendmailx/bin/smx (т.к. в подкаталоге
второго уровня вложенности). Зачем это может понадобиться практически –
затрудняюсь сказать, но, как видите, можно делать и такое.