やりたいこと
CentOSで、特定の文字列について、任意のディレクトリ配下(サブディレクトリも含めて)に存在する全てのファイルを検索する方法。findを使ってなんとかする方法。
書式
find [対象ディレクトリ] -type f -print | xargs grep -n '[検索文字列]'
かんたんなせつめい
- カレントディレクトリ以下に対して検索を実行(find ./)
- ファイルタイプが「ファイル」であるものに対して実行(-type f)
- 検索結果を標準出力に表示(-print)
パイプ先でしていること
- findの出力をxargsでリスト化する
- grepで条件(検索対象の文字列)を指定する
- grepに-nオプションを付与して行番号を表示する
例
カレントディレクトリ配下のファイルの内容についてhogeという文字列で検索する。
find . -type f -print | xargs grep -n 'hoge'
実行結果
[root@centos test]# ls -al total 12 drwxr-xr-x 2 root root 35 Nov 28 08:45 . dr-xr-x---. 25 root root 4096 Nov 27 09:50 .. -rw-r--r-- 1 root root 18 Nov 28 08:45 hi.txt -rw-r--r-- 1 root root 25 Nov 28 08:45 hoi.txt [root@centos test]# cat ./* aaa bbb hoge ccc aaa bbb ccc ddd hoge fff [root@sara test]# find . -type f -print | xargs grep -n 'hoge' ./hi.txt:3:hoge ./hoi.txt:5:hoge [root@centos test]#
grepに-nオプションを付与するとファイル名の次に行番号が表示される。
おまけ
ファイル名だけ調べるならgrepに-rlオプションつけるだけでもOK。
書式
grep -rl [検索文字列] [調査対象ディレクトリ]
例
[root@centos test]# grep -rl 'hoge' . ./hi.txt ./hoi.txt [root@centostest]#