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

예제로 배우는 리눅스 find 명령어 완벽 가이드

리눅스를 새로 설치하면 파일이 총 몇 개나 있을까요? PopOS! 배포판을 예로 들면, 무려 31,000개가 넘는 파일이 존재합니다. 이건 문서를 만들거나, 음악을 저장하거나, PDF를 내려받거나, 사진을 정리하기도 전의 숫자입니다.

예제로 배우는 리눅스 find 명령어 완벽 가이드

그렇기 때문에 필요할 때 원하는 파일이나 폴더를 찾는 일이 생각보다 쉽지 않습니다. 이 글에서는 리눅스의 find 명령어 사용법을 예제와 함께 자세히 알아보겠습니다.

리눅스 find 명령어 기본 문법

문법이란 단어나 명령어를 조합하는 방식을 말합니다. 일반 문장도 단어 순서만 바꾸면 엉뚱한 의미가 되듯이, 명령어도 올바른 형식으로 작성하지 않으면 실행되지 않습니다.

find [경로] [조건] [동작]

각 구성 요소의 의미는 다음과 같습니다.

  • find – 리눅스에서 찾기 유틸리티를 시작합니다.
  • path(경로) – 어디를 검색할지 지정합니다.
  • conditions(조건) – 검색에 적용할 옵션입니다.
  • actions(동작) – 검색 결과로 무엇을 할지 지정합니다.

세 요소를 모두 사용한 간단한 예시는 다음과 같습니다.

find . -name file-sample.rtf -print

짐작하셨겠지만, 이 명령은 file-sample.rtf라는 이름의 파일을 찾습니다.

경로에 입력한 마침표(.)는 현재 디렉터리와 그 하위 디렉터리 전체를 대상으로 하라는 의미입니다.

-name 조건은 해당 이름과 정확히 일치하는 파일을 찾으라고 지시합니다.

-print 동작은 검색 결과를 화면에 표시하라는 뜻입니다.

사실 마침표와 -print는 find 명령어의 기본값입니다. 따라서 생략해도 결과는 같으며, find -name file-sample.rtf만 입력해도 동일하게 동작합니다.

예제로 배우는 리눅스 find 명령어 완벽 가이드

다른 디렉터리에서 검색하기

현재 위치가 아닌 다른 디렉터리에서도 검색할 수 있습니다. find 뒤에 디렉터리 경로를 넣으면 됩니다. 루트 위치에서 파일이 home/user 디렉터리 안에 있다는 것을 안다면 다음처럼 입력하세요.

find home/user -name file-sample.rtf

예제로 배우는 리눅스 find 명령어 완벽 가이드

이 역시 재귀적 검색이므로 user 디렉터리 아래의 모든 하위 폴더를 탐색합니다.

여러 디렉터리 동시에 검색하기

여러 디렉터리를 한 번에 검색하려면 경로를 공백으로 구분해 나열하면 됩니다.

find /lib /var /bin -name file-sample.rtf

예제로 배우는 리눅스 find 명령어 완벽 가이드

재귀 검색 제한하기 (-maxdepth)

위의 find 명령어를 루트 수준에서 실행하면 시스템의 모든 디렉터리를 뒤집니다. 현재 디렉터리만 검색하고 싶다면 -maxdepth 옵션을 사용하세요. 이 옵션 뒤의 숫자는 몇 단계까지 하위 디렉터리로 내려갈지 결정합니다.

-maxdepth 1은 현재 디렉터리만 검색한다는 의미입니다.

find -name file-sample.rtf -maxdepth 1

예제로 배우는 리눅스 find 명령어 완벽 가이드

-maxdepth 2 이상의 숫자를 지정하면 그 단계만큼 깊이 탐색합니다.

find -maxdepth 5 -name file-sample.rtf

예제로 배우는 리눅스 find 명령어 완벽 가이드

와일드카드(*) 활용하기

find 명령어는 별표(*)를 와일드카드로 사용합니다. 이름 중 확실하지 않은 부분에 넣으면 되며, 하나의 이름에 여러 번 사용할 수도 있습니다. 확장자까지 포함해 지정하지 않으면 조건에 맞는 디렉터리도 함께 검색됩니다.

find home/user -name file*sample*

예제로 배우는 리눅스 find 명령어 완벽 가이드

파일 유형으로 검색하기 (-type)

파일이나 디렉터리만 골라 검색하려면 -type 옵션에 적절한 유형 문자를 붙입니다. 종류는 여러 가지가 있지만 가장 많이 쓰이는 것은 파일과 디렉터리입니다.

  • f – 일반 파일
  • d – 디렉터리
  • b – 블록 디바이스
  • c – 문자 디바이스
  • l – 심볼릭 링크
  • s – 소켓

find home/user -name file*sample* -type d

예제로 배우는 리눅스 find 명령어 완벽 가이드

대소문자 구분 없이 검색하기 (-iname)

윈도우와 달리 리눅스는 영문자의 대소문자를 엄격히 구분합니다. 따라서 File-Sample.rtf와 file-sample.rtf를 모두 찾고 싶다면 -iname 옵션을 사용하세요.

find home/user -iname File-Sample.rtf

예제로 배우는 리눅스 find 명령어 완벽 가이드

여러 개의 파일 동시에 찾기 (-o)

예를 들어 어떤 파일의 .rtf 버전과 .html 버전을 모두 찾고 싶다고 가정해 봅시다. -o(OR) 연산자를 사용하면 한 번의 명령으로 처리할 수 있습니다. 일부 배포판에서는 조건을 괄호로 묶어야 할 수도 있습니다. 예: ( -name file-sample.rtf -o -name file-sample.html )

find home/user -name file-sample.rtf -o -name file-sample.html

예제로 배우는 리눅스 find 명령어 완벽 가이드

특정 이름을 제외하고 검색하기 (-not)

.html 버전의 파일은 있는데 다른 버전도 있는지 확인하고 싶다면, -not 옵션으로 .html 파일을 검색 결과에서 걸러낼 수 있습니다.

find home/user -name file-sample* -not -name *.html

예제로 배우는 리눅스 find 명령어 완벽 가이드

에러 메시지 없이 깔끔하게 검색하기

앞선 재귀 검색 예제에서 검색 권한이 없는 디렉터리 목록까지 함께 출력된 것을 눈치채셨을 겁니다. 상당히 거슬리죠. "Permission denied" 메시지가 표시되지 않도록 해 봅시다. grep이라는 또 다른 리눅스 터미널 명령어와 조합하면 됩니다. 참고로 find와 grep을 조합하면 특정 단어가 포함된 파일을 찾는 데에도 활용할 수 있습니다.

find -maxdepth 5 -name file-sample.rtf 2>&1 | grep -v "Permission denied"

예제로 배우는 리눅스 find 명령어 완벽 가이드

2>&1의 의미를 하나씩 살펴보겠습니다.

  • 2 – 표준 에러 출력(stderr)을 나타냅니다.
  • 1 – 표준 출력(stdout)을 나타냅니다.
  • > – 왼쪽의 출력을 오른쪽으로 전달(리디렉션)합니다.
  • & – 서로 묶는다는 의미입니다.

즉, 2>&1은 표준 에러를 표준 출력과 합쳐 하나의 출력 스트림으로 만드는 것입니다.

이제 | grep -v "Permission denied" 부분을 살펴보겠습니다.

  • | (파이프) – 왼쪽 명령의 결과를 오른쪽 명령으로 전달합니다. 여기서는 grep 명령으로 결과를 넘겨줍니다.
  • grep – 텍스트 검색 유틸리티입니다.
  • -v – 지정한 텍스트와 일치하지 않는 것만 찾으라고 지시합니다. 즉, "Permission denied"라는 문자열이 포함되지 않은 결과만 화면에 보여주므로, 원하는 검색 결과와 그 외 다른 에러 메시지만 남게 됩니다.

권한으로 파일 찾기 (-perm)

이 기능을 잘 활용하려면 리눅스 권한 체계를 먼저 이해해야 합니다.

예제로 배우는 리눅스 find 명령어 완벽 가이드

예제 파일들은 대부분 권한이 664이고, 하나만 775입니다. -perm 옵션을 사용해 이 파일을 찾아 보겠습니다.

find Documents/ -name file-sample* -type f -perm 775

예제로 배우는 리눅스 find 명령어 완벽 가이드

파일 크기로 검색하기 (-size)

크기별로 파일을 찾으면 하드 드라이브 공간을 잡아먹는 대용량 파일을 정리할 때 매우 유용합니다. -size 옵션 뒤에 원하는 크기와 아래 접미사 중 하나를 붙입니다. 접미사를 생략하면 기본값인 b가 적용됩니다. 특정 크기 이상의 파일을 찾으려면 크기 앞에 플러스 기호(+)를 붙이세요.

  • M – 메가바이트
  • G – 기가바이트
  • k – 킬로바이트
  • b – 블록(512바이트, 기본값)
  • c – 바이트
  • w – 워드(2바이트)

find -size +500k

예제로 배우는 리눅스 find 명령어 완벽 가이드

소유자로 파일 찾기 (-user, -group)

소유자 기준으로 파일을 찾는 방법은 두 가지입니다. 사용자 이름으로 찾는 방법과 사용자 그룹으로 찾는 방법입니다. 사용자 이름으로 찾으려면 -user 옵션 뒤에 사용자명을, 그룹으로 찾으려면 -group 옵션 뒤에 그룹명을 입력합니다.

find -user username 또는 find -group groupname

예제로 배우는 리눅스 find 명령어 완벽 가이드 예제로 배우는 리눅스 find 명령어 완벽 가이드

수정 날짜 기준으로 파일 찾기 (-mtime, -mmin)

최근 X일 이내에 수정(편집)된 파일을 찾으려면 -mtime 옵션 뒤에 숫자를 붙입니다. 숫자 앞에 마이너스(-)를 붙이면 '오늘부터 그 일수 이내'에 변경된 파일을, 플러스(+)를 붙이면 '그 일수보다 오래된' 파일을 찾습니다.

find -name "file-sample*" -mtime +5 (5일보다 오래됨)

find -name "file-sample*" -mtime -5 (5일 이내)

예제로 배우는 리눅스 find 명령어 완벽 가이드

분 단위로 수정된 파일을 찾으려면 -mmin 옵션 뒤에 분 수를 입력하고, 위와 같이 +와 - 기호를 활용합니다.

find -name "file-sample*" -mmin -5

find -name "file-sample*" -mmin +5

예제로 배우는 리눅스 find 명령어 완벽 가이드

마지막 접근 시간 기준으로 파일 찾기 (-atime, -amin)

파일이 마지막으로 열렸던 시간을 기준으로 찾을 때는 일 단위는 -atime, 분 단위는 -amin 옵션을 사용합니다. 뒤에 일수나 분 수를 입력하고, +와 - 기호로 '이상'과 '이하'를 지정합니다.

find -name "file-sample*" -atime -5

예제로 배우는 리눅스 find 명령어 완벽 가이드

find -name "file-sample*" -amin -5

예제로 배우는 리눅스 find 명령어 완벽 가이드

find 명령어를 다른 리눅스 명령어와 조합하기

앞서 find를 grep 명령어와 함께 사용하는 예제를 살펴봤는데, 이 외에도 수많은 명령어와 조합할 수 있습니다. find와 다른 명령어를 조합하면 매우 강력한 도구가 되며, 작업 시간을 크게 줄여 줍니다. 예를 들어 특정 유형의 파일을 대량으로 삭제해야 한다고 상상해 보세요. 파일 탐색기에서 일일이 찾아다니는 대신 적절한 명령어 한 줄이면 몇 초 만에 처리됩니다. 이제 여러분은 find 명령어를 어떻게 활용할 계획인가요?