find 명령은 지정된 위치에서 파일 및 디렉토리를 검색하는 데 사용되는 Unix 계열 시스템의 명령줄 유틸리티입니다.
find 명령의 기본 구문은 다음과 같습니다.
find [path...] [expression]
여기서 [path...]는 검색의 시작점이며 디렉터리, 파일 또는 여러 디렉터리와 파일이 될 수 있으며 [expression]은 파일과 디렉터리를 검색해야 하는 조건을 정의하는 선택적 인수입니다.
일반적으로 사용되는 일부 옵션에는 -name, -type, -size, -mtime 및 -print가 포함되며 작업에는 -exec 및 -delete가 포함됩니다.
find 명령은 지정된 조건과 일치하는 파일 및 디렉토리 목록을 출력합니다. 특정 파일이나 디렉터리를 검색하고 찾은 파일과 디렉터리에 대한 작업을 수행하고 삭제하는 데 사용할 수 있습니다.
find / -name "*.txt"
이 찾기 명령은 루트 디렉터리(/) 및 해당 하위 디렉터리에서 .txt 확장자를 가진 모든 파일을 검색하고 찾은 파일의 이름을 표시합니다.
1. -name 옵션
-name 옵션이 있는 find 명령을 사용하면 디렉터리 계층 구조에서 특정 이름을 가진 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/posts 디렉토리에서 모든 .html 파일을 찾으려면 다음 명령을 사용할 수 있습니다.
find /blog/posts -name "*.html"
그러면 다음과 같은 결과가 생성됩니다.
/blog/posts/post1.html
/blog/posts/post2.html
/blog/posts/post3.html
find 명령은 *.html 패턴과 일치하는 이름을 가진 /blog/posts 디렉토리 계층 구조의 모든 파일을 검색합니다.
2. -type 옵션
-type 옵션이 있는 find 명령을 사용하면 특정 유형(예: 일반 파일, 디렉토리, 심볼릭 링크 등)의 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/blog 디렉토리에서 모든 디렉토리를 찾으려면 다음 명령을 사용할 수 있습니다.
find /blog -type d
그러면 다음과 같은 출력이 생성됩니다.
/blog/assets
/blog/posts
find 명령은 유형이 d(디렉토리)인 /blog 디렉토리 계층 구조의 모든 파일을 검색합니다.
다음 유형도 사용할 수 있습니다.
f: 일반 파일
d: 디렉토리
l: 심볼릭 링크
c: 캐릭터 디바이스 파일
b: 블록 장치 파일
s: 소켓
p: 명명된 파이프(FIFO)
** 형식 인수는 대소문자를 구분하지 않습니다.
3. -iname 옵션
-iname 옵션이 있는 find 명령을 사용하면 대소문자를 구분하지 않고 특정 이름을 가진 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.HTML
post3.Html
index.html
파일 이름의 대소문자에 관계없이 /posts 디렉토리에 있는 모든 .html 파일을 찾으려면 다음 명령을 사용할 수 있습니다.
find /blog/posts -iname "*.html"
그러면 다음과 같은 결과가 생성됩니다
/blog/posts/post1.html
/blog/posts/post2.HTML
/blog/posts/post3.Html
find 명령은 /blog/posts 디렉토리 계층에서 대소문자를 구분하지 않는 방식으로 *.html 패턴과 일치하는 이름을 가진 모든 파일을 검색합니다.
4. -path 옵션
-path 옵션이 있는 find 명령을 사용하면 전체 경로 이름에서 특정 패턴과 일치하는 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/posts 디렉토리에서 모든 .html 파일을 찾으려면 다음 명령을 사용할 수 있습니다
find /blog -path "*/posts/*.html"
그러면 다음과 같은 결과가 생성됩니다
/blog/posts/post1.html
/blog/posts/post2.html
/blog/posts/post3.html
find 명령은 */posts/*.html 패턴과 일치하는 경로가 있는 /blog 디렉토리 계층 구조의 모든 파일을 검색합니다. 패턴의 * 문자는 모든 문자 시퀀스와 일치하므로 이 패턴은 /blog 디렉토리 아래에 있는 posts라는 디렉토리에 있는 .html 확장자를 가진 모든 파일과 일치합니다.
5. -size 옵션
-size 옵션이 있는 find 명령을 사용하면 크기를 기준으로 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png (100 KB)
background.jpg (500 KB)
/posts
post1.html (20 KB)
post2.html (10 KB)
post3.html (15 KB)
index.html (30 KB)
/blog 디렉토리에서 50KB보다 큰 모든 파일을 찾으려면 다음 명령을 사용할 수 있습니다.
find /blog -size +50k
그러면 다음과 같은 결과가 생성됩니다
/blog/assets/background.jpg
find 명령은 크기가 50KB보다 큰 /blog 디렉토리 계층 구조의 모든 파일을 검색합니다. 숫자 50 뒤의 k는 크기가 킬로바이트 단위임을 지정합니다.
512바이트 블록에는 b, 바이트에는 c, 2바이트 단어에는 w, 메가바이트에는 M을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
50개의 512바이트 블록에 대해 +50b
50바이트의 경우 +50c
50킬로바이트의 경우 +50k
50메가바이트의 경우 +50M
숫자 인수 바로 뒤에는 공백 없이 단위가 와야 합니다.
6. -mtime 옵션
-mtime 옵션이 있는 find 명령을 사용하면 수정 시간을 기준으로 파일을 검색할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png (modified 3 days ago)
background.jpg (modified 7 days ago)
/posts
post1.html (modified 1 day ago)
post2.html (modified 5 days ago)
post3.html (modified 9 days ago)
index.html (modified 2 days ago)
5일 이상 전에 수정된 /blog 디렉토리의 모든 파일을 찾으려면 다음 명령을 사용할 수 있습니다.
find /blog -mtime +4
그러면 다음과 같은 결과가 생성됩니다
/blog/assets/background.jpg
/blog/posts/post2.html
/blog/posts/post3.html
위 find 명령으로 /blog 디렉토리 계층 구조에서 수정 시간이 4일 이상 지난 모든 파일을 검색합니다. mtime의 양수 값은 현재 시간 이전의 24시간 기간 수를 지정하고 음수 값은 현재 시간 이후의 24시간 기간 수를 지정합니다.
7. -exec 옵션
-exec 옵션이 있는 find 명령을 사용하면 검색 기준과 일치하는 각 파일에 대해 지정된 명령을 실행할 수 있습니다. 다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/posts 디렉토리에 있는 모든 .html 파일의 권한을 644로 변경하려면 다음 명령을 사용할 수 있습니다.
find /blog/posts -name "*.html" -exec chmod 644 {} \;
이렇게 하면 출력 메시지 없이 /posts 디렉토리에 있는 .html 파일의 권한이 644로 변경됩니다. chmod 644는 검색 기준과 일치하는 각 파일(/posts 디렉토리의 .html 파일)에 대해 실행하려는 명령입니다. {}는 기준과 일치하는 파일의 이름을 나타내고 \; 마지막에 -exec 명령을 종료하는 데 필요합니다.
-exec 옵션을 사용하여 rm으로 파일 삭제, cp로 복사, mv로 이동 등 검색 기준과 일치하는 파일에 대해 다양한 작업을 수행할 수 있습니다. chmod 명령을 원하는 작업에 대한 적절한 명령으로 바꾸십시오.
8. -print
-print 옵션이 있는 find 명령은 검색 기준과 일치하는 파일의 이름을 표시하는 데 사용됩니다. 다른 작업이 지정되지 않은 경우 find 명령이 수행하는 기본 작업입니다.
다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/posts 디렉토리에 있는 모든 .html 파일의 이름을 표시하려면 다음 명령을 사용할 수 있습니다.
find /blog/posts -name "*.html" -print
그러면 다음과 같은 결과가 생성됩니다
/blog/posts/post1.html
/blog/posts/post2.html
/blog/posts/post3.html
find 명령은 /posts 디렉토리 계층에서 모든 .html 파일을 검색하고 -print 옵션은 검색 기준과 일치하는 파일의 이름을 표시합니다. -print 옵션은 다른 작업이 지정되지 않은 경우 find 명령이 수행하는 기본 작업이므로 생략할 수 있습니다.
9. -delete 옵션
-delete 옵션이 있는 find 명령은 검색 기준과 일치하는 파일을 삭제하는 데 사용됩니다.
다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
30일 이상 전에 마지막으로 수정된 /posts 디렉토리의 모든 .html 파일을 삭제하려면 다음 명령을 사용할 수 있습니다.
find /blog/posts -name "*.html" -mtime +30 -delete
이렇게 하면 출력 메시지 없이 30일 이상 전에 마지막으로 수정된 /posts 디렉토리의 .html 파일이 삭제됩니다.
-delete 옵션은 위험한 옵션이며 부적절하게 사용하면 영구적인 데이터 손실이 발생할 수 있습니다. 이 옵션을 사용할 때, 특히 많은 수의 파일과 일치할 수 있는 -name 또는 -path와 같은 검색 기준과 결합할 때 주의하십시오. 찾기 명령을 -delete 옵션과 함께 사용하기 전에 -print 옵션으로 테스트하여 원하는 파일만 일치하는지 확인하는 것이 좋습니다.
10. -depth 옵션
-depth 옵션이 있는 find 명령은 깊이 우선 방식으로 디렉토리 계층에서 파일을 검색하는 데 사용됩니다. 즉, 하위 디렉토리를 검색하기 전에 디렉토리에서 파일과 디렉토리를 검색합니다.
다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
하위 디렉토리 앞에 나열된 디렉토리의 파일과 함께 /blog 디렉토리 계층에 있는 모든 파일의 이름을 표시하려면 다음 명령을 사용할 수 있습니다
find /blog -depth -print
그러면 다음과 같은 출력이 생성됩니다
/blog/assets/logo.png
/blog/assets/background.jpg
/blog/posts/post1.html
/blog/posts/post2.html
/blog/posts/post3.html
/blog/index.html
/blog/posts
/blog/assets
/blog
find 명령은 깊이 우선 방식으로 /blog 디렉토리 계층 구조를 검색하고 -print 옵션은 찾은 파일 및 디렉토리의 이름을 표시합니다. -depth 옵션은 디렉토리의 파일이 하위 디렉토리 앞에 나열되도록 합니다.
11. -maxdepth 옵션
-maxdepth 옵션이 있는 find 명령은 디렉토리 계층에서 검색 깊이를 제한하는 데 사용됩니다. -maxdepth 옵션은 검색할 명령줄 인수 아래의 최대 디렉터리 수준 수를 지정합니다.
다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/blog 디렉토리와 바로 아래 하위 디렉토리에 있는 모든 파일의 이름을 표시하려면 다음 명령을 사용할 수 있습니다.
find /blog -maxdepth 1 -print
그러면 다음과 같은 출력이 생성됩니다.
/blog/assets
/blog/posts
/blog/index.html
find 명령은 /blog 디렉토리 계층 구조의 최상위 레벨만 검색하고 -print 옵션은 찾은 파일 및 디렉토리의 이름을 표시합니다. -maxdepth 1 옵션은 검색 깊이를 /blog 디렉토리 아래의 한 수준으로 제한합니다.
12. -mindepth 옵션
-mindepth 옵션이 있는 find 명령은 검색을 시작할 명령줄 인수 아래의 디렉터리 수준의 최소 수를 지정하는 데 사용됩니다.
다음과 같은 블로그 플랫폼의 디렉토리 구조를 예를 들겠습니다.
/blog
/assets
logo.png
background.jpg
/posts
post1.html
post2.html
post3.html
index.html
/blog 디렉토리의 하위 디렉토리에 있는 모든 파일의 이름을 표시하고 /blog 디렉토리 자체의 파일은 표시하지 않으려면 다음 명령을 사용할 수 있습니다.
find /blog -mindepth 1 -print
그러면 다음과 같은 결과가 생성됩니다.
/blog/assets/logo.png
/blog/assets/background.jpg
/blog/posts/post1.html
/blog/posts/post2.html
/blog/posts/post3.html
/blog/posts
/blog/assets
find 명령은 /blog 디렉토리의 하위 디렉토리를 검색하고 -print 옵션은 찾은 파일 및 디렉토리의 이름을 표시합니다. -mindepth 1 옵션은 검색을 시작할 디렉터리 계층 구조의 최소 수준을 지정합니다. 이 경우에는 /blog 디렉터리보다 한 수준 아래입니다.
댓글