Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 find 명령어로 파일 검색하는 방법 완벽 가이드

이 글에서는 리눅스의 find 명령어가 무엇인지 소개하고, 검색 위치를 지정하는 단축 표기법, 자주 쓰이는 표현식, 실제 사용 예시, 패턴을 활용한 검색 방법, 검색 결과를 파일로 저장하는 방법, 그리고 찾은 파일에 대해 곧바로 명령을 실행하는 방법까지 차근차근 설명합니다.

'find' 명령어로 리눅스에서 파일 찾기

리눅스에서 파일을 검색할 때 사용하는 명령어는 find입니다.

find 명령어의 기본 문법은 다음과 같습니다.

find [검색 시작 위치] [표현식] [찾을 파일 이름]

경로를 별도로 지정하지 않으면 현재 작업 중인 경로가 기본 검색 위치로 설정됩니다. 드라이브 전체를 검색하려면 다음과 같이 입력하세요.

find /

반대로 현재 머물러 있는 폴더만 검색하고 싶다면 아래 문법을 사용합니다.

find .

전체 드라이브에서 파일 이름을 기준으로 검색할 때는 다음 문법을 사용합니다.

find / -name "파일이름"
  • 첫 번째 부분은 find 명령어 자체입니다.
  • 두 번째 부분은 검색을 시작할 위치입니다.
  • 세 번째 부분은 무엇을 찾을지 결정하는 표현식입니다.
  • 마지막 부분은 찾고자 하는 파일의 이름입니다.

대부분의 배포판에서 셸(터미널 창이라고도 함)에 접근하려면 해당 아이콘을 클릭하거나 Ctrl+Alt+T를 누르면 됩니다.

검색 위치 단축 표기법

find 명령어 뒤에 오는 첫 번째 인수는 검색할 위치입니다. 특정 디렉터리를 직접 지정할 수도 있지만, 메타문자로 대체할 수도 있습니다. 이 명령어와 함께 쓸 수 있는 세 가지 메타문자는 다음과 같습니다.

  • 마침표(.): 현재 폴더와 그 안에 중첩된 모든 하위 폴더를 의미합니다.
  • 슬래시(/): 파일 시스템 전체를 의미합니다.
  • 틸데(~): 현재 로그인한 사용자의 홈 디렉터리를 의미합니다.

파일 시스템 전체를 검색하면 권한 거부(access denied) 오류가 발생할 수 있습니다. 일반 계정으로 접근할 수 없는 영역까지 검색해야 한다면 sudo 명령어로 관리자 권한을 얻어 실행하세요.

사용할 수 있는 표현식

가장 많이 쓰이는 표현식은 -name으로, 파일이나 폴더의 이름을 기준으로 검색합니다.

그 외에도 상황에 맞게 활용할 수 있는 다양한 표현식이 있습니다.

  • -amin n: 파일에 마지막으로 접근한 시각이 n분 전(+/- 입력 방식에 따라 기준 앞뒤)일 때 일치합니다.
  • -anewer 참조파일: 지정한 참조 파일보다 최근에 접근된 파일을 찾습니다.
  • -atime n: 파일에 마지막으로 접근한 시각이 n일 전(입력 방식에 따라 많거나 적음)일 때 일치합니다.
  • -cmin n: 파일의 상태(권한·소유자 등)가 마지막으로 변경된 시각이 n분 전일 때 일치합니다.
  • -cnewer 참조파일: 지정한 참조 파일보다 최근에 상태가 변경된 파일을 찾습니다.
  • -ctime n: 파일의 상태가 마지막으로 변경된 시각이 n일 전일 때 일치합니다.
  • -empty: 비어 있는 파일을 찾습니다.
  • -executable: 실행 가능한 파일을 찾습니다.
  • -false: 항상 거짓을 반환합니다.
  • -fstype 유형: 지정한 파일 시스템에 속한 파일을 찾습니다.
  • -gid n: 그룹 ID가 n인 그룹에 속한 파일을 찾습니다.
  • -group 그룹이름: 지정한 이름의 그룹에 속한 파일을 찾습니다.
  • -ilname 패턴: 심볼릭 링크를 대소문자 구분 없이 검색합니다.
  • -iname 패턴: 파일 이름을 대소문자 구분 없이 검색합니다.
  • -inum n: 지정한 inode 번호를 가진 파일을 찾습니다.
  • -ipath 경로: 경로를 대소문자 구분 없이 검색합니다.
  • -iregex 표현식: 정규 표현식을 대소문자 구분 없이 검색합니다.
  • -links n: 지정한 개수의 링크를 가진 파일을 찾습니다.
  • -lname 이름: 심볼릭 링크를 검색합니다.
  • -mmin n: 파일 내용이 마지막으로 수정된 시각이 n분 전일 때 일치합니다.
  • -mtime n: 파일 내용이 마지막으로 수정된 시각이 n일 전일 때 일치합니다.
  • -name 이름: 지정한 이름의 파일을 검색합니다.
  • -newer 참조파일: 지정한 참조 파일보다 최근에 수정된 파일을 찾습니다.
  • -nogroup: 그룹 ID가 없는 파일을 찾습니다.
  • -nouser: 소유자(사용자)가 없는 파일을 찾습니다.
  • -path 경로: 지정한 경로를 검색합니다.
  • -readable: 읽을 수 있는 파일을 찾습니다.
  • -regex 패턴: 정규 표현식과 일치하는 파일을 검색합니다.
  • -type 유형: 특정 유형의 항목을 검색합니다.
    • -type d: 디렉터리
    • -type f: 일반 파일
    • -type l: 심볼릭 링크
  • -uid uid: 숫자 사용자 ID가 지정한 uid와 같은 파일을 찾습니다.
  • -user 이름: 지정한 사용자가 소유한 파일을 찾습니다.
  • -writable: 쓰기 가능한 파일을 찾습니다.

find 명령어 실전 사용 예시

find 명령어는 다양한 방식으로 활용할 수 있습니다. 몇 가지 대표적인 예시를 살펴보겠습니다.

특정 일수 이전에 접근한 파일 찾기

홈 폴더 안에서 100일보다 오래전에 접근한 모든 파일을 찾으려면 다음과 같이 입력합니다.

find ~ -atime +100

빈 파일과 빈 폴더 찾기

시스템 전체에서 비어 있는 파일과 폴더를 모두 찾으려면 다음 명령어를 사용합니다.

find / -empty

실행 가능한 모든 파일 찾기

컴퓨터에 있는 실행 가능한 파일을 모두 찾으려면 다음과 같이 입력합니다.

find / -executable

읽을 수 있는 모든 파일 찾기

읽기 권한이 있는 파일을 모두 찾으려면 다음 명령어를 사용합니다.

find / -readable

패턴을 활용해 파일 검색하기

파일을 검색할 때 패턴을 사용할 수도 있습니다. 예를 들어 확장자가 MP3인 모든 파일을 찾으려면 다음과 같이 입력합니다.

find / -name *.mp3

사용 중인 셸에 따라 별표(*)를 이스케이프 처리해야 할 수 있습니다. 명령어를 실행했는데 기대한 결과가 나오지 않는다면, 아래처럼 패턴 전체를 따옴표로 감싸 별표를 이스케이프 처리해 보세요.

find / -name '*.mp3'

find 명령어 결과를 파일로 저장하는 방법

find 명령어의 가장 큰 문제점은 결과가 너무 많아 한눈에 확인하기 어려울 때가 있다는 것입니다. 이럴 때는 결과를 tail 명령어로 파이프(|)하여 일부만 보거나, 다음과 같이 출력을 파일로 저장하면 됩니다.

find / -name *.mp3 > 결과목록.txt

파일을 찾아서 바로 명령 실행하기

파일을 검색하는 동시에 편집하고 싶다면 다음과 같이 입력합니다.

find / -name "파일이름" -exec nano {} \;

위 명령어는 '파일이름'이라는 이름의 파일을 검색한 뒤, 찾은 파일에 대해 nano 편집기를 실행합니다.

nano는 명령어의 이름일 뿐이며, 이 문법의 필수 요소는 아닙니다. -exec 옵션 뒤에는 원하는 다른 명령어를 자유롭게 지정할 수 있습니다.