読者です 読者をやめる 読者になる 読者になる

conf t

インフラエンジニアのメモ

grepでディレクトリ配下のファイルを検索する

現在のディレクトリなど特定のディレクトリ配下のファイルをgrepで検索する方法

パターン1 grepの-rオプションを使う

grep -r aaa ./*

上記では現在のディレクトリ配下(./*)のファイルに対して検索をかけています。

使用例

# grep -r aaa ./*
./20160229/test2.py:print ("aaaa", )
./20160416/test.txt:test aaaaa
./20160416/test.txt:if ( aaa aaa ) {
./20160416/test.txt:if ( aaa aaa ) {
./20160528/url.txt:http://aaa/bbb.html?huigina
./20160528/url.txt:http://aaa.bbb.ccc/ddd.html?huigina
./20160528/url.txt:http://aaa.bbb.ccc/ddd/ddd.html?huigina
./20160528/url.txt:http://aaa/
./20160528/url.txt:http://aaa.bbb.ccc/ddd.html%Ahuigina
./20160528/url.txt:http://aaa/%3A4B6C

パターン2 findを使う

find . -type f | xargs grep aaa

使用例

# find . -type f | xargs grep aaa
./20160229/test2.py:print ("aaaa", )
./20160528/url.txt:http://aaa/bbb.html?huigina
./20160528/url.txt:http://aaa.bbb.ccc/ddd.html?huigina
./20160528/url.txt:http://aaa.bbb.ccc/ddd/ddd.html?huigina
./20160528/url.txt:http://aaa/
./20160528/url.txt:http://aaa.bbb.ccc/ddd.html%Ahuigina
./20160528/url.txt:http://aaa/%3A4B6C
./20160416/test.txt:test aaaaa
./20160416/test.txt:if ( aaa aaa ) {
./20160416/test.txt:if ( aaa aaa ) {

私はパターン2を覚えていて使っていましたがパターン1はgrepにオプション1つで使えるのでタイプが楽で便利ですね。
パターン2の使い方はgrepのところを別のコマンドにしたり色々応用が出来ます。

特定のディレクトリだけ除外するとき

実行例

# grep -r aaa ./* --exclude-dir={./20160528,./20160416}
./20160229/test2.py:print ("aaaa", )
./20160229/20160528/test.txt:grep test aaa

ディレクトリ配下をgrepしていると、たまに不要なディレクトリ内まで検索してしまうことがあります。
--exclude-dir=で除外するディレクトリを指定します。
上記実行例のようにかっことカンマを使えば複数ディレクトリを指定できますし、
以下のようにワイルドーカードを使って記述もできます。

実行例

# grep -r aaa ./* --exclude-dir=20160[45]*
./20160229/test2.py:print ("aaaa", )

1つめの除外例では./20160229/20160528/が除外されていませんが、2つ目の例では除外されています。
パスで記載するとパスで解釈され、
ファイル名だけで書くとファイル名にマッチしたらディレクトリがどこにあっても除外されるようです。

広告を非表示にする