Универсальным инструментом для поиска файлов является команда find. Однако в zsh имеются штатные средства, которые в определённых случаях могут выполнять некоторые её функции. Это — маски вида **/*.[suffics] или **/[symbols]*, которые могут использоваться как аргументы команды ls. Например, команда

$ ls **/*.png

выведет список всех файлов png-изображений в текущем каталоге и всех вложенных подкаталогах:

arts/for-logo01.png				    install/img-old/opensuse28.png
arts/for-logo02.png				    install/img-old/opensuse29.png
...

и так далее. А команда

$ ls **/kde*.html

проделает то же самое для html-файлов, в которых речь идёт о среде KDE:

shpargalki/kdesu.html		    story/kde/config/kde-config03.html
story/kde/config/kde-config01.html  story/kde/config/kde-config04.html
story/kde/config/kde-config02.html  story/kde/config/kde-config05.html
...

Более того, аналогичные маски можно использовать в аргументах команды grepдля поиска фрагментов текстов. Так, команда

$ grep KDE **/*html

выведет все строки с упоминанием KDE в html-файлах каталога текущего и вложенных. А в форме

$ grep KDE **/kde*.html

она произведёт аналогичный поиск только в файлах вида kde01.html, kde02.html и так далее.

Однако и это ещё не всё: конструкции вида **/* можно использовать как аргументы команд управления файлами, таких, как cp, mv, rm. В частности, с помощью команд вида

$ cp **/*.png /path2/[backdir]

и

$ mv **/*.png /path2/[backdir]

можно рекурсивно скопировать или, соответственно, переместить все файлы, отвечающие указанной маске, в каталог для резервных копий. Правда, поскольку структуры исходных каталогов при этом сохраняться не будет, практическая ценность таких конструкций не велика. Но зато она оказывается очень полезной при избавлении от временных копий, которые по умолчанию так любят сохранять некоторые текстовые редакторы и ворд-процессоры. Так, с помощью команды

$ rm -f **/*~

можно легко гуртом избавиться от всех файлов такого рода, где бы они ни были в пределах текущего (например, домашнего) каталога. Конечно же, проявив должное внимание при вводе.

В принципе, если пораскинуть мозгами, как было с агентом Клаусом после попадания в его голову пули из парабеллума Штирлица, можно придумать и более иные способы применения масок вида **/* — я рассказал лишь о тех, которые использую в своей жизнедеятельности постоянно.

И разумеется, это не делает команду find избыточной: в сложных ситуациях без неё не обойтись. Но в случаях простых, подобных описанным выше, штатные средства zsh оказываются вполне достаточными.


К содержанию | Zsh-шпаргалки