検索したらすぐ出ますが、自分用。
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コマンドに渡す。
納得です。
まだまだ勉強が足りません。