Linux find grep
리눅스 find grep 명령어로 특정 디렉토리 밑에 특정 단어 포함하는 파일 찾기
- 개발을 진행하다 보면, DB server가 변경된다던가, 특정 변수들을 고쳐야 한다던가
- 특정단어를 포함하는 모든 파일을 서칭해야 할 시기가 있다.
- 그럴때 find, grep 명령어를 동시에 사용하여 원하는 단어를 포함한 파일 전체를 찾아낼 수 있다.
1. find grep 사용방법
- find 는 특정 디렉토리 및 파일을 찾을 때 주로 사용하고
- grep 은 특정 단어를 검색할 떄 주로 사용한다.
- 두개를 합쳐서 특정 디렉토리 에 특정한 단어를 포함하는 파일들을 찾을 수 있다.
// /data/ 밑에 타입이 file이고, 192.168.0.1 이라는 단어를 포함하는 파일 전체를 찾기
$ find /data/ -type f | xargs grep -n '192.168.100.1'
- find /data/ : /data/ 디렉토리 하위 전체중에서
- -type f : 파일 타입들만 골라서
- | xargs : 한줄씩 읽어들이고
- grep -n '192.168.100.1' : 192.168.100.1 이라는 단어를 포함하는 애를 -n(line,줄번호) 까지 출력한다.
2. sh를 이용하여 특정 디렉토리 제외하고 원하는 디렉토리만 골라 검색하여 파일로 저장하기
- 서비스되고있는 서버의 경우 백업디렉토리, 이미지 디렉토리 등 용량이 상당한 디렉토리가 있다.
- 지정한 디렉토리에서 EXCEPTIONS 배열로 검색하지 않을 디렉토리를 지정하여 제외한 후
- 나머지 원하는 내용을 grep하여 특정 디렉토리 하위에 파일로 토해내서 쉽게 고칠 수 있다.
- shell 스크립트의 do while문을 사용하여 아래와 같이 sh파일을 작성해보자.
#! /bin/bash
## file path : /data/search_file.sh
## file name : search_file.sh
#exception Dirs
EXCEPTIONS=('backup', 'images', 'img', 'logs', 'test', 'upload_tmp')
ls -l ./ | awk '/^d/{print $NF}' | while read input
do
if [[ "${EXCEPTIONS[*]}" =~ ${input} ]]; then
echo ${input} " is exciption dirs "
continue
fi
echo [${input}] 'search start!'
grep -r "192\.168\.0\.1" ./${input}/ --include=*.{php,inc,html,jsp,asp} > ./search_result_${input}.txt
done
echo 'search End!'
- EXCEPTIONS=('backup', 'images', 'img', 'logs', 'test', 'upload_tmp')
- 해당 search_file.sh 가 존재하는 /data/ 디렉토리 밑에 있는 하위 디렉토리 중에서
- search 작업을 하고싶지 않은 디렉토리명을 배열로 지정한다.
- ls -l ./ | awk '/^d/{print $NF}' | while read input do ~ done
- 해당 파일이 존재하는 디렉토리 /data/ 하위 디렉토리중 awk 로 필드단위 패턴을 지정하고
- awk 시스템 변수중 현재 디렉토리의 폴더 개수(현재레코드의 필드개수) 를 나타내는 $NF 변수를 사용.
- 해당 갯수만큼 read한 하위디렉토리를 input으로 지정하여 do while문을 실행한다.
- if [[ "${EXCEPTIONS[*]}" =~ ${input} ]]; then fi
- 위에서 지정한 EXCEIPTIONS 배열 안에, ls -l | awk로 지정된 하위디렉토리 명이 존재할 경우
- 아래 grep문을 실행하지 않기 위해 continue로 하단 부분을 실행하지 않고
- 다음 awk print $NF로 넘어가서 while을 작동시킨다.
- grep -r "192\.168\.0\.1" ./${input}/ --include=*.{php,inc,html,jsp,asp} > ./search_result_${input}.txt
- 192.168.0.1이 포함된 단어가 while로 돌고있는 /data/ 하위디렉토리 내에
- php,inc,html,jsp,asp 확장자로 존재하는 파일에 포함되어 있을 경우
- 해당 /data/ 디렉토리 바로 밑에 search_result_{while돌고있는 하위디렉토리명}.txt 로
- grep한 내용을 출력하여 파일로 토해낸다.
내용이 유익하셨다면 구독 및 좋아요 클릭 부탁드려요 :)
오늘 하루도 즐거운 하루 보내세요!
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 RedHat, CentOS 계열 리눅스에 톰캣 설치하기! (2) | 2020.04.28 |
---|---|
[Linux] redhat , CentOS 계열 리눅스에 open jdk 설치하기 (0) | 2020.04.27 |
[Linux]알기쉽게 설명하는 리눅스 하드링크 정의 및 사용방법! (0) | 2020.03.20 |
[Linux]알기쉽게 설명하는 리눅스 심볼릭링크 정의 및 사용방법! (0) | 2020.03.20 |
[Linux] Rsync 란? 알기쉽게 설명하는 Rsync (1) | 2020.03.18 |