리눅스에서 파일을 찾기 위해서는 find 명령어를 사용합니다. find 명령어의 다양한 옵션으로 파일을 찾을 수도 있고, 다른 옵션등을 조합하여 내용을 검색할 수도 있습니다.
Find 주요 옵션 [1]
Find 예제find 명령어로 폴더를 지정 할 때 . 을 입력하면 현재 폴더 및 하위(서브) 폴더를 기반으로 탐색하며, /를 입력하면 전체 폴더를 지정한다. 파일명으로 찾기 (-name)
생성시간으로 찾기 (-mtime)
문자열 찾기 (xargs grep)
찾은 파일 액션 (exec)
참고자료[1] https://itwiki.kr/w/%EB%A6%AC%EB%88%85%EC%8A%A4_find 오늘은 Linux 시스템에서 파일/디렉터리를 검색할 때 사용하는 find 명령어 사용법을 정리해 본다. #1. find 란?find 명령어는 "이름 그대로 리눅스에서 접근할 수 있는 파일 시스템에 파일/디렉터리를 찾는(find) 명령어"이다. 어느 OS나 마찬가지지만, 리눅스 파일 시스템은 구조가 아주 복잡하다. 이 중에는, 비슷한 이름의 파일과 동일한 확장자를 가진 파일, 그리고 종류가 다양한 파일들이 존재한다. 복잡한 구조에서 원하는 파일을 가능한 정확히 찾을 수 있도록, find 명령에는 다양한 옵션이 존재한다. 자, 그럼 find 명령의 기본적인 사용법을 살펴보고, 다양한 옵션을 통해 우리가 찾는 파일/디렉터리를 신속/정확하게 검색하는 방법에 대해 알아보자. #2. find 명령어 사용법
#3. 명령어 사용 예제기본적인 사용 방법은 다음과 같다.
[옵션]의 경우 잘 사용하지 않아서, 존재를 알지 못하는 사용자도 많다. (나 또한 그랬다) 다음 예는 현재 경로에서 "FILE"로 시작하는 파일을 찾는 예입니다. 현재 경로에서의 파일 검색은 파일이 많은 디렉터리가 아닌 이상 사용할 일이 잘 없다.
그렇다 보니, 다음과 같은 기본 형식으 변형하여 자주 사용한다.
자주 사용되는 find 명령어는 다음과 같다.
자, 이제부터 하나씩 간단한 예제와 함께 보충설명 들어간다. #3-1. 현재 경로에 파일/디렉토리 표시find 명령에 옵션, 경로, 표현식을 생략하는 경우 현재 경로 하위에 파일/디렉터리를 찾아 출력한다. find : 현재경로 하위에서 파일/디렉터리를 검색해 출력
#3-2. [경로]에 있는 모든 파일/디렉터리 표시find 명령에 [경로] 입력을 통해, 해당 경로 하위에 있는 모든 파일/디렉터리를 검색할 수 있다.
#3-3. 현재 경로에 [NAME]검색find 명령에 문자열 입력을 통해, 현재 경로에 있는 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. (하위 경로 미포함)
#3-4. 현재 경로 하위 파일/디렉터리에서 [NAME] 검색find 명령에 경로를 지정해서, 해당 경로 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. find . -name "NAME" :현재 경로 하위에서 "NAME"의 파일/디렉터리 검색
#3-5. 루트 "/" 디렉토리 하위에서 [NAME] 검색find 명령에 경로를 지정해서, 시스템 루트 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. (권한이 없을 경우 sudo 명령을 붙여서 실행 필요) find / -name "NAME" : "/" 루트경로 하위에서 "NAME"의 파일/디렉터리 검색
#3-6. 사용자의 홈 디렉터리 하위에서 [NAME] 검색find 명령에 경로를 지정해서, 사용자 홈디렉터리 하위에서 특정 이름을 가진 파일/디렉터리를 검색할 수 있다. find ~ -name "NAME" : 사용자 홈 디렉토리 하위에서 "NAME"의 파일/디렉토리 검색
#3-7. 현재 경로 하위에서 특정 문자열을 포함하는 파일/디렉토리 검색find 명령에 문자열 시작/끝에 와일드카드 문자(*)를 포함하여 특정 문자열이 포함된 파일/디렉토리를 검색할 수 있다. find . -name "*STR*" : 현재 경로 하위에서 "STR" 문자열을 포함하는 파일/디렉터리 검색
#3-8. 현재 경로 하위에서 빈 디렉토리 혹은 크기가 0인 파일 검색-empty 표현식을 사용하면 해당 경로 하위에서 빈 디렉토리 or 크기가 0인 파일을 검색할 수 있다. find . -empty :현재 경로 하위에서 빈 디렉터리 나 크기가 -0인 파일을 검색
#3-9. 현재 경로 하위에서 특정 확장자의 파일 검색 후 삭제처리-delete 표현식을 사용하면 검색된 파일/디렉터리의 삭제처리가 가능하다. -name "*.EXT"로 특정 확장자의 파일을 검색 후 삭제할 수 있다. find . -name "*.EXT" -delete : ".EXT"확장자를 가진 파일을 찾아 삭제 처리
#3-10. 현재 경로 하위에서 [NAME]을 검색하여 줄 바꿈 없이 표시-print0 표현식을 사용하면 출력 결과를 줄 바꿈 없이 표시할 수 있다. -print 표현식의 경우 줄 바꿈을 표시한다. (기본값) find . -name [NAME] -print0 :현재 경로 하위에서 "NAME"의 파일/디렉터리 검색하여 줄 바꿈 없이 표시
#3-11. 현재 경로 하위 파일/디렉터리/심볼릭 링크에서 [NAME]을 검색-type 표현식을 사용해서 검색 유형을 지정할 수 있다. type는 "f" 폴더, "d" 디렉터리, "l" 심볼릭링크로 지정할 수 있다. find . -name [NAME] -type f : 현재 경로 하위에서 "NAME"의 파일을 검색하여 표시
#3-12. 현재 경로 하위에서 수정시간 기준 파일/디렉터리 검색-mtime 표현식을 통해 수정시간 기준으로 파일을 검색할 수 있다. -atime(액세스 시간), -ctime(변경 시간), -mmin(수정 분), -amin(액세스 분), -cmin(변경 분) 등 표현식도 사용 가능하다. find . -mtime -N :현재 경로 하위에서 수정시간이 N*24 시간 미만인 파일/디렉터리 검색 -N : 수정시간이 1*24 (24)시간 미만인 파일/디렉터리 N : 수정시간이 1*24 (24)시간 정확히 일치하는 파일/디렉터리
#3-13. 현재 경로 하위에서 파일 사이즈로 검색-size 표현식을 사용해서 파일/디렉터리 사이즈로 검색도 가능하다. +/- 를 통해 초과/미만으로 검색 가능하며, 크기 값 뒤에 c/k 등의 구분자를 붙여 용량 기준을 설정할 수 있다. b : block c : bytes w : 2-byte words k : kibibytes (KiB, unit of 1,024 bytes) M : mebibytes (MiB, 1,024*1,024=1,048,576 bytes) G : gibibytes (GiB, 1,024*1,024*1,024=1,073,741,824 bytes) find . -size +[SIZE1]c -size -[SIZE2]c :현재 경로 하위에서 크기가 SIZE1 bytes 초과 SIZE2 bytes 미만인 파일/디렉터리를 검색한다
#3-14. 현재 경로에서만 [NAME] 검색 (하위 디렉토리 미포함)-maxdepth 표현식을 사용해 검색할 하위 경로의 depth를 한정하여 검색할 수 있다. find . -maxdepth 1 -name [NAME] :현재 경로에서만 "NAME"의 파일/디렉터리를 검색한다
#3-15. 현재 경로에서 특정 권한의 파일/디렉터리 검색-perm 표현식을 통해 특정 권한을 가진 파일/디렉터리를 검색할 수 있다. find . -perm 0664 :현재 경로 하위에서 "0664 -rw-rw-r--" 권한을 가진 파일/디렉터리를 검색한다
#3-16. 검색된 파일의 상세정보 출력 (ls 명령 실행)-exec 표현식과 ls 명령을 사용, 현재 경로 하위에서 "NAME"을 포함하는 파일/디렉토리를 검색 후 -exec ls -al을 통해 상세정보를 출력한다. find . -name [NAME] -exec ls -al {} \; : 현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 상세 정보를 출력
#3-17. 검색된 파일에서 문자열 검색 (grep 명령 실행)-exec 표현식과 grep 명령을 사용, 현재 경로 하위에서 "NAME"을 포함하는 파일/디렉토리를 검색 후 -exec grep "STR"을 통해 검색된 파일에서 "STR" 문자열을 포함한 라인을 출력할 수 있다. find . -name [NAME] -exec grep "STR" {} \; : 현재 경로 하위에서 "NAME"의 파일을 검색 후 "STR"문자를 포함하는 라인을 출력
#3-18. 검색된 파일을 특정 [경로]로 복사 (cp 명령 실행)-exec 표현식과 cp 명령을 사용해서 검색된 파일을 특정 경로로 복사할 수 있다. find . -name [NAME] -exec cp {} [경로] \; : 현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "경로"로 복사
#3-19. 검색된 파일로 압축파일 생성 (tar 명령 실행)-exec 표현식과 tar 명령을 사용해서 검색된 파일을 압축파일로 생성할 수 있다. find . -name [NAME] -exec tar -xcvf [파일명.tar.gz] {} \; : 현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "파일명.tar.gz" 압축파일 생성
#3-20. 검색된 결과를 파일로 저장 (redirection ">" 실행)">" redirection 표현식을 사용해서 -print 표준 출력이 아닌 결과를 파일로 저장할 수 있다. find . -name [NAME] > [FILE_NAME] : 현재 경로 하위에서 "NAME"의 파일/디렉터리를 검색 후 "FILE_NAME" 파일에 결과를 출력
#3-21.검색 결과 오류 메시지 출력 안 함 (redirection ">" 실행)">" redirection 표현식을 사용하면, find 명령 실행 시 빈번하게 발생하는 permission 관련 오류 메시지를 표시하지 않도록 하여 결과 확인을 원활하게 할 수 있다. find / -name [NAME] 2> dev/null : 시스템 루트 하위에서 "NAME"의 파일/디렉터리를 검색, 오류 메시지 출력 안 함 표준 에러(2)를 "/dev/null"로 Redirection 처리
이상 리눅스 "find" 명령어에 대해 정리해 봤다. 실무에서 자주 사용하게되는 추가 명령어나, 표현식이 생기면 업데이트하겠다. 도움이 되셨다면, 공감 or 댓글 하나 씨게 부탁한다. ^ㅡ^* |