본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 17. 파일 검색

 

유닉스형 시스템이 세대를 거쳐 전해 내려온 전통에 따라, 리눅스 파일시스템이 꽤나 체계적이다.
이번 내용은 시스템의 파일을 검색하는 데 사용하는 명령어를 정리할 것이다.

 

 

1. locate - 손쉽게 파일 찾기

$ locate bin/zip
locate 프로그램은 경로명에 대한 빠른 데이터베이스를 검색을 수행하고 주어진 조건에 일치하는 모든 이름을 출력한다.

예를 들면, zip으로 시작하는 모든 프로그램을 찾으려고 한다.
위의 코드처럼 bin/ 으로 끝나는 디렉토리명을 지정한 다음, 경로명을 검색하고 bin/zip 문자열이 포함된 결과를 출력한다.
/usr/bin/zip
/usr/bin/zipcloak
. . .​

 

 

 

2. find - 다양한 방법으로 파일 찾기

# 
$ find ~

# 파일의 개수를 출력해주는 wc 명령어 사용.
$ find ~ | wc -l
locate 프로그램은 오로지 파일명에 근거하여 파일을 찾을 수 있지만
find 프로그램은 다양한 속성에 근거하여 주어진 디렉토리를 검색하여 파일을 찾는다. 즉 특정 조건에 부합하는 파일을 찾아낼 수 있다는 장점이 있는 것이다.

find에는 테스트, 액션, 옵션을 적용하여 검색할 수 있다.

 

1) 테스트

검색 결과에서 디렉토리 목록만을 보고 싶을 때,
$ find ~ -type d | wc -l​
-type d 라는 테스트를 추가해서 디렉토리 검색으로 제한한 코드이다.

-type f 하는 명령어를 이용해서 일반 파일을 검색할 수도 있다.

파일 형식 찾기

  • b : 블록 특수 파일 
  • c : 문자 특수 파일
  • d : 디렉토리
  • f : 파일
  • l : 심볼릭 링크 파일
또 다른 예를 들면,
$ find ~ -type f -name "*.JPG" -size +1M | wc -l​

 

위의 코드를 보면 와일드 카드 패턴 *.JPG와 일치하면서 1메가바이트보다 큰 파일을 검색해 보는 코드이다.

-name : name 테스트를 사용해서 파일 명을 출력한다.
"*.JPG" : 경로명 확장을 막기 위해서 따옴표를 사용였고, .JPG로 끝나는 파일명을 가리킨다.
+1M : 1 메가바이트보다 큰 파일 ( - 인 경우, 보다 작은 파일을 뜻함 )

 

2) 연산자

 

find의 논리 연산자

  • -and : 연산자를 기준으로 양쪽 테스트 조건이 모두 참인 경우, -a로 줄여 쓸 수 있다.
  • - or : 연산자를 기준으로 양쪽 테스트 중 하나라도 참인 경우, -o로 줄여 쓸 수 있다.
  • -not : 연산자 다음에 나오는 테스트가 거짓인 경우 검색, -!로 줄여 쓸 수 있다.
  • ( ) : 테스트와 연산자를 조합하여 표현한 내용을 하나로 그룹화할 때 사용된다.

 

3) 액션

 

미리 정의된 액션

  • -delete : 현재 검색된 파일을 삭제한다.
  • -ls : 검색된 파일에 대하여 ls -dils와 같은 명령을 실행, 출력으로 전송된다. 
  • -print : 검색 겨로가의 전체 경로명을 표준 출력으로 출력한다.
  • -quit : 검색 조건에 해당하는 결과가 하나라도 나올 경우 검색 종료.

 

사용자 정의 액션

미리 정의된 액션뿐만 아니라 임의의 명령어를 실행할 수도 있다.
대표적인 것으로 -exec 액션이 있다.

$ find ~ -type f --name "어쩌고" -exec  rm '{}' ';'​

-exec : 뒤에 올 명령어들을 실행하라는 뜻이다. (rm 이면 삭제)
'{}' : 현재 경로명에 대한 심볼릭 링크를 표시.
';' : 실행이 끝마침을 표시.