4

私はより良い発見を探しています。その理由は、findユーザーインターフェイスは私には直感的ではなく(特に、プルーニング/印刷スタイル)、引数の順序に関する厳密な要件のために関数でラップするのが難しいためです。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):

  • Itayの提案で、私は約1年間ackを使用しました。それは私の検索の少なくとも95%で非常にうまく機能します。
  • 私は最近、ackの高速バージョンであるAgを発見しました。過去数週間はうまく機能しています。

更新(2014-11-23):

Agを強くお勧めします。それは素晴らしい働きをします。まだ検索が必要なことが何度もあり、そのために私は素晴らしい代替品を探し続けています。間違いなく便利ですが、Findのインターフェースは非常に古く、私の意見では不必要に難しいものです。

更新(2017-08-04):

私は今、不可欠なAgの代替品としてripgrepを強くお勧めします。これは非常に新しいツールですが、.gitignoreファイルのサポートはAgを大幅に上回り、他のすべての点で同等以上です。私はFindの代替品を探し続けています。

アップデート(2021-11-28):

私は自分のニーズのほとんどを満たすripgrepを使い続け、愛しています。他のすべてについては、findとfdを組み合わせて使用​​します。

4

1 に答える 1

2

ソースコードツリーでの作業用に最適化された、との両方の代わりとなるAckを試してみてください。findgrep

于 2012-10-08T10:50:59.763 に答える