grepコマンドでディレクトリ除外


検索したらすぐ出ますが、自分用。

findコマンドとgrepコマンドの使い方です。

[paz@paz-para:hoge]$ \tree
|– fuga.txt
|– hoge.txt
`– hogehoge
`– hoge.txt

こんなディレクトリ構成で、

[paz@paz-para:hoge]$ cat hoge.txt
hogeテキストだよ。
[paz@paz-para:hoge]$ cat fuga.txt
fugaテキストだよ。
[paz@paz-para:hoge]$ cat hogehoge/hoge.txt
hogeテキストだよ。

こんなファイルがあるときに、「hogehoge」ディレクトリを除いてgrepしたい時には、

[paz@paz-para:hoge]$ find ./ -print | grep -v ‘^./hogehoge/’ | xargs grep -l ‘hoge’

こーすれば解決できるようです。

順番に確認してみると、

[paz@paz-para:hoge]$ find ./ -print
./
./fuga.txt
./hogehoge
./hogehoge/hoge.txt
./hoge.txt

findコマンドのパスにカレントを、アクションに-printを指定し、カレント以下のファイルのフルパスを出力する。
次に、

[paz@paz-para:hoge]$ find ./ -print | grep -v ‘^./hogehoge/’
./
./fuga.txt
./hoge.txt

findコマンドの結果を「|」でgrepコマンドに渡す。
grepコマンドは-vオプションを指定し、文字列と一致したものを除外(一致しなかったものを出力)する。
で、

[paz@paz-para:hoge]$ find ./ -print | grep -v ‘^./hogehoge/’ | xargs grep -l ‘hoge’
./hoge.txt

xargsコマンドで改行で区切られた文字列を受け取り、grepコマンドに渡す。

納得です。
まだまだ勉強が足りません。

, ,

  1. No comments yet.
(will not be published)
  1. No trackbacks yet.