我正在寻找一个更好的发现。原因是查找用户界面对我来说不直观(特别是修剪/打印样式),并且由于对参数排序的严格要求而难以包装在函数中。 locate / updatedb不够灵活,不能使用。是否有人愿意分享他们的例子找到包装或找到替代品(仅限命令行)?
以下是我发现不直观用法的示例:
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 "$@"
}
要求对程序中的所有选项有一个完美的理解,以便能够用一些默认值来包装它,而不是失去与普通查找的功能/兼容性,这似乎很愚蠢。
我猜我不会像GNU发现的那样标准化,但可能有更好的东西,尽管鲜为人知。
更新(2013-11-26):
更新(2014-11-23):
我强烈推荐Ag。它很棒。仍有很多次查找是必要的,为此我继续寻求一个很好的替代品。虽然无疑是有用的,但Find的界面非常过时,在我看来也不必要。
更新(2017-08-04):
我现在最强烈推荐ripgrep作为不可或缺的Ag替代品。这是一个非常新的工具,但它支持.gitignore文件大大超过Ag,在所有其他方面它是相同或更好的。我继续搜索查找替代品。