2012-05-07 4 views
5

私はgrepを使って、ユーザのbinフォルダ内のbibtexプログラムを自動的に探し出そうとしています。grepにファイルを返し、ディレクトリを無視させるようにするにはどうすればいいですか?

問題は、bibtexという名前のディレクトリが頻繁に返されることです。これは、スクリプトが自動的にコマンドを実行できないことを意味します。

grep(または実際にlocateコマンド)にディレクトリを自動的に無視させるにはどうすればよいですか?

EDIT:現在のコマンドは次のとおりです。locate bibtex | grep "/bibtex$" -d skip | head -n1

答えて

1

Sigh、私のクリーンではありませんが、動作します。 perl -ne 'chomp($f=$_);print if !-d $f'

あなたのコマンドになります

locate bibtex | perl -ne 'chomp($f=$_);print if !-d $f' | grep "/bibtex$" -d skip | head -n1

+0

'-d skip'は' grep'への入力が 'stdin'なのでここで何もしません。あなたのコマンドを 'perl -ne 'chompに短くすることができます。もしあれば印刷! -d'' –

+0

これは私の最初の実行でしたが、欠落している改行がパイプチェーンの後で問題を引き起こすかどうかは不明でした。私はそういう意味でNervous Nellyだと思う。 –

+0

ところで、もし '-d 'なら' perl -lne'の印字を短くすることができます(chompは必要ないと思われますが 'perl -lne 'chompなら'!-d' ')。 –

12

findコマンドは?

find /bin -name bibtex -type f 

通常のファイルであるタイプ「f」のファイル名「bibtex」を探します。

+1

icecreamheadは、検索が終了したのですぐにこの回答を受け入れます: –

+0

この回答は実際には機能しますが、この状況では理想的ではない多くの時間がかかります。 – icecreamhead

4
locate --basename '\bibtex' --limit 1 

grepheadの必要性がなくなりますが、それでも結果がディレクトリであるかどうかの問題を解決していません。

なぜあなたはいたしません。その名前でプログラムのPATHになります

type -P bibtex 

+0

-P bibtexは完全に動作します! – icecreamhead

2

私はので、多分私の解決策が間違っている正確に理解していない:なぜあなたはwhichを使用していませんか?またはbibtexにありませんPATH

関連する問題