Я ищу лучшую находку. Причина в том, что пользовательский интерфейс find неинтуитивный для меня (в частности, стиль обрезки/-печатки) и сложный обернуть функцию из-за строгих требований к упорядочению аргументов. locate/updatedb недостаточно гибко, чтобы использовать вместо этого. Кто-нибудь захочет поделиться своим примером, найти обертки или найти альтернативы (только в командной строке, пожалуйста)?Лучшая замена GNU
Вот пример того, что я нахожу, чтобы быть неинтуитивным использованием:
find dir_a dir_b \(-path dir_a/.git -o -path dir_b/out \) -prune -o \(-type f -o -type l \)
Указания каталогов, прежде чем варианты странно для меня, и синтаксиса для обрезки легко забываются. (Некоторые программы используют параметр --exclude.) Я признаю, что это придирчивая точка.
Вот моя лучшая попытка указать некоторые значения по умолчанию, не теряя много функций:
f()
{
# The trouble is that -regextype must appear after path but before expression.
# HACK: "-D debugopts" unsupported and -[HLPO] options assumed to before dirs.
local a=()
while [[ -n "$1" ]] && ([[ ! "${1:0:1}" =~ [-!(),] ]] || [[ "${1:0:2}" =~ -[HLPO] ]])
do
a+=("$1")
# Eliminate arg from @.
shift
done
find -O3 "${a[@]}" -nowarn -regextype egrep "[email protected]"
}
Это кажется глупо требовать идеального понимания всех вариантов в программе, чтобы иметь возможность обернуть его с некоторыми значениями по умолчанию и не потерять функциональность/совместимость с обычным поиском.
Я предполагаю, что я не буду разбираться в стандарте GNU, но может быть что-то лучшее, хотя и менее известное.
Update (2013-11-26):
- По предложению Итай, я использовал ack около года. Он работает очень хорошо, по крайней мере, на 95% моих поисков.
- Недавно я обнаружил Ag, что является быстрой версией ack. В течение последних нескольких недель он работал хорошо.
Update (2014-11-23):
Я настоятельно рекомендую Ag. Он отлично работает. Есть еще много раз Найти, и для этого я продолжаю искать хорошую замену. Хотя, безусловно, полезно, интерфейс Find's очень устарел и излишне затруднен, на мой взгляд.
Update (2017-08-04):
я теперь наиболее рекомендую ripgrep в качестве незаменимого замены Ag. Это очень новый инструмент, но поддержка файлов .gitignore значительно превосходит Ag и другими способами эквивалентна или лучше. Я продолжаю искать замену Find.
Обязательные требования к порядку аргументов__страницы не очень ясны, поскольку вы вызываете 'find' с' -O3', который может оценивать тесты в другом порядке. – C2H5OH
Xargs with Find несколько полезен, но я использую File :: Find from Perl. – starbolin
@ C2H5OH, когда я упомянул строгий порядок, я имел в виду то, что навязывается самой. Если заказ не соответствует ожиданиям, поиск приведет к ошибке. Я признаю, что оптимизация может изменить порядок заказа, но это нормально. –