컴퓨터/Linux

Linux (4) - 리눅스로 파일 찾기, 파일 속 문자 찾기 (find, grep)

달서비 2023. 10. 23. 21:36

리눅스에서 다루는 파일이 많아지다 보면 특정한 파일, 혹은 파일 안에 내용이 필요 할때가 있습니다. 또는 exec와의 연계를 통하여 검색한 프로그램 자체를 실행할 수 있습니다. 이번에는 리눅스로 파일을 찾는 방법을 알아보도록 하겠습니다.

penguin - pixabay

find

find는 파일 디렉터리를 검색하는 명령어입니다.

find [경로] -name "파일명"
find ./* -name "*sample*"

find의 옵션은 다음과 같습니다.

  • -name : 주어진 이름의 파일이나 디렉터리를 찾습니다.
  • -type :  지정한 파일 타입을 찾습니다. (d:디렉터리, f:파일, l:링크, p:파이프, s:소켓) 
  • -exec : find로 파일을 찾고 해당 파일과 연계하여 명령을 수행합니다.
  • -ls : ls -l가 동일하게 리스트를 출력한다.
  • -iname : 대소문자 구별 안 하고 이름으로 검색한다.
  • -print : 검색 결과를 파일의 절대경로로 표시합니다.

 

1. 전체 파일을 검색하여 파일명 찾기

find / -name 'sample*'

전체 디렉토리중 sample로 시작하는 파일 검색합니다.

 

2. 특정 디렉터리의 하위파일 검색 

 find ./ -type f

해당 예제는 현재 디렉터리에서 전체 파일을 검색하는 예제입니다. -type d인 경우에는 폴더를 검색합니다.

 

3. 특정 디렉터리에서 1024byte보다 큰 파일 검색

find ./ -size +1024c

해당 예제는 현재 디렉터리에서 1024바이트보다 큰 파일을 검색하는 예제입니다.

 

4. 찾은 파일을 실행하기 (exec)

find ./ -name "sample.sh" -exec {} \;

해당 예제는 sample.sh 파일을 찾고, 해당 shell 파일을 실행합니다.

 

grep

grep은 파일 안에 문자열을 검색하는 명령어입니다.

grep -r "검색할 문자열" [경로]
grep -r "Hello World" ./*

grep의 옵션은 다음과 같습니다.

  • -r : 하위 디렉토리를 포함한 전체파일을 검색합니다.
  • -v : 패턴과 일치하지 않는 라인을 표시합니다.
  • -c : 일치하는 라인의 개수를 표시합니다.
  • -l : 일치하는 내용이 있는 파일 이름만 표시합니다.
  • -h : 일치하는 내용을 찾은 파일의 이름을 표시하지 않습니다.
  • -n : 일치하는 라인을 표시할 때 행 번호와 함께 표시합니다.

 

1. 전체 파일을 대상으로 문자열 검색

grep -r "Hello World" /

최상위 디렉터리 '/' 에서 Hello World를 검색합니다.

 

2. 특정 파일을 대상으로 문자열 검색

find ./ -name "*.txt" | xargs grep "hello world"

해당 예제는 현재 디렉터리에서 전체 'txt' 파일 중 'hello world'가 문자열로 있는 경우 해당 위치를 출력합니다.

 

3. 파일 내부 문자열을 검색할 때 강조색이 나오게 하기

find ./ -name "sample.txt" | xargs grep --color=auto "Hello World"

해당 예제는 현재 디렉터리중 'sample.txt'파일을 찾고 Hello World라는 문자열이 있는 경우 강조색을 출력합니다.

 

4. 검색결과 파일로 저장하기

grep -r 'sample' ./ > result.txt

 

해당 예제는 현재 디렉토리 기준으로 전체파일중 sample이라는 문자열이 있는 경우 해당 결과를 result.txt에 저장합니다.