디렉터리 트리를 조건으로 검색해
find는 시작 경로 아래를 순회하면서 각 항목에 검사식과 동작을 적용해. 이름만 찾는 도구가 아니라 종류, 크기, 수정 시각과 깊이를 조합해 대상을 고를 수 있어. 결과를 바로 변경 명령으로 넘길 수도 있어서 강력하지만, 검색 범위와 조건을 먼저 출력으로 검증해야 해.
명령의 기본 모양
find <start-path> <tests> <actions> 형태로 읽으면 돼. 시작 경로를 명시하면 어느 트리를 걷는지 분명해지고, 동작을 생략하면 보통 -print가 적용돼. 셸이 *를 find보다 먼저 확장하지 않도록 이름 패턴은 따옴표로 감싸. BSD find와 GNU find는 지원 옵션과 옵션 위치가 다를 수 있으므로 현재 머신의 매뉴얼 페이지를 확인해.
자주 쓰는 검사식
-name '*.py'와-iname '*.py': 이름을 대소문자 구분 또는 무시하고 찾아.-type f,-type d,-type l: 일반 파일, 디렉터리, 심볼릭 링크를 구분해.-size +100M: 기준보다 큰 항목을 찾아.-mtime -7와-mmin -60: 수정 시각을 일 또는 분 단위로 검사해.-empty: 빈 파일이나 디렉터리를 찾아.-maxdepth 2: 순회 깊이를 제한해. 구현에 따라 위치 제약이 있을 수 있어.
수정 시각, 생성 시각과 메타데이터 변경 시각은 같은 개념이 아니므로 자동 정리 기준을 정확히 선택해야 해.
출력과 실행 동작을 분리해
-print: 경로를 한 줄씩 보여 줘.-print0: NUL로 경계를 표시해 공백과 줄바꿈이 든 파일명을 안전하게 전달해.-exec cmd {} \;: 각 항목마다 명령을 실행해.-exec cmd {} +: 여러 항목을 묶어 실행해 호출 수를 줄여.-delete: 일치 항목을 삭제하므로 같은 조건을-print로 먼저 검토해야 해.
검색 결과를 문자열로 다시 파싱하지 말고 파일명 경계를 보존하는 동작을 골라.
작은 표본에서 조건을 확정해
find ~ -type f -mmin -60은 최근 한 시간에 수정된 홈 파일을, find . -name '*.log' -type f -size +10M은 큰 로그 파일을 찾아. 삭제나 권한 변경이 목적이라면 처음에는 좁은 시험 디렉터리에서 경로만 출력하고, 예상한 항목 수와 대표 표본을 확인해. 그다음에만 변경 동작을 붙여. 빠른 대화형 이름 검색에는 fd가 편할 수 있지만, 기본 Unix 환경에서 복잡한 조건을 조합할 때 find의 계약을 알아두면 이식성이 좋아.