Online video hd

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

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

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

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 смотреть онлайн