Online video hd

Смотреть красивое видео

Официальный сайт forexnw 24/7/365

Смотреть welinux.ru

  • Вопросы и ответы
  • Talks!
  • Лента
  • Регистрация Войти
    kstep 19.10.2009 19:02

    Tips & tricksZsh-алиасы — find ещё проще

    Я очень часто использую связку find и grep для сложного поиска по файлам.

    Наиболее частый вариант:
    1
    find . -xdev -name "*.py" -exec grep "def __init__" {} +


    Очень уж длинно. Захотелось это укоротить, но не теряя при этом выразительности =)

    Для начала упростим сам вызов find:
    1
    alias ff='find . -xdev -name'



    Теперь как-то надо ужать «-exec grep».
    В zsh есть такая разновидность алиасов, как глобальные. Это такие алиасы, которые раскрываются
    не только в будучи в начале строки (на месте команды), но и в любом другом её месте.
    Их и используем:

    1
    2
    3
    alias -g -- -grep='-exec grep'
    alias -g -- -all='{} +'
    alias -g -- -one='{} \;'



    Параметр -g задаёт тот самый глобальные алиас, двойной дефис «--» нужен для того, чтобы
    команда alias не путала имена алиасов, начинающиеся с дефиса, со своими параметрами.

    В итоге первая команда запишется просто и изящно:
    1
    ff \*.py -grep "def __init__" -all



    Вот такой баланс краткости и выразительности.
    А заодно и пример использования алиасов для новичков (я надеюсь, полезный =)


    Тэги: alias find grep zsh
    + 8 -
    Похожие Поделиться

    exelens 19.10.2009 19:11 #
    + 0 -
    В следующий раз прошу ставить КАТ
    Username 19.10.2009 19:15 #
    + -2 -
    почему все так любят find? Не знакомы с locate?
    kstep 19.10.2009 19:24 #
    + 10 -
    У локейта есть два больших минуса:

    1) он ищет не по живой фс, а по индексам, то есть не по актуальным данным. Он хорош, когда нужен глобальный поиск по всей фс, в особенности по той её части, которая редко меняется (установленные пакеты, глобальные конфиги и мануалы-доки например), если нужен поиск по небольшой ветке каталогов и критична актуальность файлов (например при разработке ПО), то лучше find, т.к. он всегда акутален (не будешь же каждые две секунда запускать updatedb на каталоге, в котором всё меняется каждую секунду? А скорость поиска find'ом по такому малому дереву вполне себе огромна.

    2) он не даёт такой гибности поиска, как find. Попробуй с помощью локейта исключить файлы по их mode'у. Или искать только симлинки. Или ещё скомбинировать несколько разных сложных фильтров. Без дополнительного find/grep-а не обойдёшься. Если нужен сложный поиск по множеству критериев, то опять же find лучше, locate разве что может сузить область такого поиска.

    В общем это два разных инструмента и нельзя предпочесть один другому во всех случаях. Не будешь же ты забивать гвозди отвёрткой?
    muhas 19.10.2009 20:47 #
    + 7 -
    имхо глобальные алиасы тут не ахти подходят, функции было бы проще, вышло что-нить вроде такого
    bla () {find . -xdev -name "$1" -exec grep "def __init__" {} $2 }ну и про xargs не забываем, с ним find всё-таки немного проще(имхо, конечно)
    kstep 20.10.2009 12:15 #
    + 0 -
    Ты прав, конечно. Я тоже делал подобные функции с файндом и грепом (только вместо текста $2 =).

    Только одна беда, ИМХО: страдает выразительность, а я её люблю =)
    Собственно мне нравится выразительность запросного «языка» findа,
    и хотелось его просто расширить новыми командами, так что их можно использовать
    не только как новые команды, но и в составе других поисковых файнд выражений (find /usr/local/bin -executable -grep "bin/bash" -all какой-нить например.)

    В общем весь пост — моё ИМХО. Я пробовал разные подходы к упрощению своей работы,
    но этот пережил генетический отбор и до сих пор используется =)

    Смотреть онлайн бесплатно

    Онлайн видео бесплатно


    Смотреть русское с разговорами видео

    Online video HD

    Видео скачать на телефон

    Русские фильмы бесплатно

    Full HD video online

    Смотреть видео онлайн

    Смотреть HD видео бесплатно

    School смотреть онлайн