46

ackのファイル/ディレクトリがデフォルトを無視することについて何か誤解していると確信していますが、おそらく誰かが私のためにこれに光を当てることができます:

mbuck$ grep logout -R app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak: <%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>
mbuck$ ack logout app/views/
mbuck$

一方...

mbuck$ ack -u logout app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak
98:<%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>

オプションなしで呼び出すだけではファイルack内の結果を見つけることはできませんが、オプションを使用して呼び出すと結果を見つけることができます。しかし、私が知る限り、ackはデフォルトでファイルを無視しません。.bak--unrestricted.bak

アップデート

以下の有益なコメントのおかげで、ここに私の新しい内容があります~/.ackrc

--type-add = ruby​​ = .haml、.rake
--type-add = css = .less
4

4 に答える 4

52

ack無視するファイルタイプのブラックリストではなく、検索するファイルタイプのホワイトリストがないという点で独特です。

マニュアルページから引用するには:

ファイルを選択せずack-grep​​に、認識したタイプのファイルのみを検索します。というファイルがfoo.wangoありack-grep、.wangoファイルが何であるかわからない場合は、ack-grep検索しません。

ack-grep(名前の競合のためにバイナリが呼び出されるUbuntuを使用していることに注意してください)

ack --help-typesackインストールがサポートするタイプのリストが表示されます。

于 2010-06-14T16:33:06.163 に答える
13

ackが検索するファイルについて混乱した場合は、-fオプションを追加するだけです。検索可能であることが判明したすべてのファイルが一覧表示されます。

于 2010-06-14T19:24:36.650 に答える
12

ack --man状態:

ackですべてのファイルを検索する場合は、コアダンプやバックアップファイルのように常に無視するファイルも含めて、「-u」スイッチを使用します。

ackがデフォルトで不明なファイルを無視するのはなぜですか?ackは、プログラマーがコードの大きなツリーを検索するために、プログラマーによって設計されています。ほとんどのコードベースには、ソースファイルではない多くのファイル(コンパイル済みオブジェクトファイル、ソース管理メタデータなど)が含まれており、grepはそれらすべてを検索し、それらのファイルから一致を返すのに多くの時間を浪費します。

そのため、認識できないものを検索しないというackの動作は、その最大の強みの1つです。つまり、見たいものだけを検索することで得られる速度です。

編集:また、ソースコードを見ると、bakファイルは無視されます。

于 2010-06-14T16:36:29.940 に答える
5

ackと格闘する代わりに、1973年のプレーンな古いgrepを使用できます。ホワイトリストに登録されたファイルタイプではなく、明示的にブラックリストに登録されたファイルを使用するため、正しい結果が省略されることはありません。数行の構成(1990年代にホームディレクトリの「dotfiles」リポジトリで作成したもの)を考えると、grepは実際にackの主張する利点の多くと一致するかそれを上回ります-特に速度:同じファイルのセットを検索する場合、grep ackよりも高速です。

私を幸せにするgrep構成は、私の.bashrcでは次のようになります。

# Custom 'grep' behaviour
# Search recursively
# Ignore binary files
# Output in pretty colors
# Exclude a bunch of files and directories by name
# (this both prevents false positives, and speeds it up)
function grp {
    grep -rI --color --exclude-dir=node_modules --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude-dir=.tox --exclude=tags "$@"
}

function grpy {
    grp --include=*.py "$@"
}

無視するファイルとディレクトリの正確なリストは、おそらくあなたによって異なります。私は主にPython開発者であり、これらの設定は私のために機能します。

また、Pythonソースをgrepするために使用する「grpy」で示すように、サブカスタマイズを追加するのも簡単です。

このようにbash関数を定義することは、GREP_OPTIONSを設定するよりも望ましい方法です。これにより、実行したプログラムによって呼び出されるものも含め、ログインシェルからのgrepのすべての実行が異なる動作をします。これらのプログラムは、おそらくgrepの予期しない異なる動作を妨害するでしょう。

私の新しい関数「grp」と「grpy」は、意図的に「grep」をシャドウイングしないので、必要なときにいつでも元の動作を使用できます。

于 2011-10-04T11:08:49.733 に答える