Есть ли альтернативная find
программа с более обычным интерфейсом CLI? find
работает и ожидает параметры совершенно иначе, чем большинство других утилит.
Пояснение: я ищу программу, которая в основном имеет те же функции, что и find, с интерфейсом командной строки, который работает и выглядит как рекомендации командной строки POSIX (или, по крайней мере, GNU).
command-line
software-rec
find
utilities
Тамас Селеи
источник
источник
ack
и мне было интересно, есть ли лучшеfind
.Ответы:
Это распространенное заблуждение.
Найти следует за синтаксисом опций. Вы просто путаете первичные выражения с параметрами:
Альтернатива находится. Но find реализует свой собственный синтаксис выражений, потому что он предоставляет более богатый набор параметров фильтров и действий. Нет альтернативы, которая могла бы сделать то же самое, просто потому что это было бы излишним.
источник
find
«ожидает параметры совершенно иначе, чем большинство других утилит». Вы утверждаете, что OP "путает первичные выражения с опциями". У большинства других утилит вообще есть понятие "праймериз выражения"? Если нет, разве это не демонстрирует точку зрения ОП? И это действительно не самая странная часть использованияfind
. Что включает в себя другой CLI{}
(который, конечно, как-то должен быть экранирован)?Это зависит от точной функциональности, на
find
которую вы полагаетесь. Если это (главным образом) функциональность поиска, некоторые оболочки поддерживают рекурсивные глобусы. Например, сzsh
:Zsh имеет гораздо больше возможностей поиска с помощью глобальных квалификаторов (смотрите в конце
man zshexpn
). Например:ls -l **/*(.)
≈find -type f -ls
ls *(m-2u:$USER:)
≈find -mtime -2 -user $USER
Bash 4 также имеет
**/
(вы должны включить егоshopt -s globstar
), но ничего похожего на глобальные квалификаторы.источник
Я бы посмотрел на
locate
. Он будет просматривать свою базу данных файлов и быстро распечатывать имена путей, которые соответствуют тому, что вы даете.Как вы можете видеть, это
odg
совпадение подтекста : если вы дадите его , то оно будет соответствовать d odg e. Но если вы дадите это.odg
, тогда это не будет.Однако есть один недостаток: ему нужна база данных. Эта база данных должна быть обновлена, когда все меняется. Однако в моей установке Fedora 13 это помещается в ежедневный crontab.
источник
locate
Что ты пытаешься найти? Если вы обычно ищете файлы с исходным кодом, взгляните на
ack
. Это в основном инструмент поиска исходного кода, но-f
переключатель ack найдет файлы, которые соответствуют заданному типу файлов.Так что, если вы хотите найти все файлы Perl в каталоге, например, просто:
Если вам не нравятся типы файлов, которые распознает ack, вы можете добавить свои собственные в свои
~/.ackrc
.ack не похож на искатель файлов общего назначения
find
, но если вы работаете с исходным кодом, это может быть очень удобно.источник
silversearcher-ag
пакет на основных дистрибутивах.Одна из замечательных вещей, которую должен выучить каждый программист: если вы не можете найти инструмент, создайте свой собственный!
Я мог бы написать лучше, с
-t
фильтром типов и т. Д.Изменить : выше это скрипт Bash. Он принимает аргумент командной строки и передает его для поиска в качестве значения опции -name. Просто простой пример. Так как я поднял этот ответ, я нашел этот скрипт на python:
https://github.com/sjl/friendly-find/
Интерфейс выглядит красиво, но я не проверял его производительность. Может стоит проверить.
источник
$<
не делает ничего полезного в моем Bash. Что вы ожидаете от этого? Вы имеете в виду на"$@"
самом деле? Или"$1"
(что в принципе означает это в Makefile)?$<
этоcsh
эквивалентread
- я думаю, он имел в виду это.Самый стандартный способ найти вещи в Unix.
источник
grep | awk
это антипаттерн. Вижу бесполезное использованиеgrep
. Если вы хотите параметризовать шаблон, может быть,du -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
awk
, но одно из больших преимуществ философии UNIX заключается в том, что не нужно понимать все функции более сложных инструментов (таких какawk
иfind
), чтобы создавать конвейеры, которые могут выполнять желаемое задача.grep | awk
может быть не оптимальным (или, на производительной многопоточной системе с высокооптимизированнойgrep
, возможно, так и будет!), но это просто .