리눅스 find와 -exec, 파이프(|) 비교
리눅스에서 파일 검색과 처리 시 자주 쓰이는 find, -exec, 파이프(|)의 차이와 사용법을 정리합니다.
1. find
특정 경로에서 파일/디렉터리를 검색할 때 사용합니다.
예시
1
2
| # 현재 디렉터리부터 .txt 파일 찾기
find . -name "*.txt"
|
조건 예시
-type f → 일반 파일만-type d → 디렉터리만-name "파일명" → 이름 기준-mtime -1 → 수정한 지 1일 이내
2. -exec
find로 찾은 파일에 대해 명령어를 실행합니다.
1
| find [경로] [조건] -exec [명령어] {} \;
|
{} → find가 찾은 각 파일 자리\; → 명령어 끝+ → 여러 파일을 한 번에 명령어 인자로 전달
예시
1
2
3
4
5
| # 각 파일 용을 출력
find . -name "*.txt" -exec cat {} \;
# 여러 파일을 한 번에 처리
find . -name "*.txt" -exec cat {} +
|
특징
| 옵션 | 동작 방식 | 장점/단점 |
|---|
\; | 파일마다 1번 실행 | 안전하지만, 파일 많으면 느림 |
+ | 여러 파일 한 번에 실행 | 빠르지만 명령어가 여러 파일 처리 가능해야 함 |
3. 파이프(|)와 xargs
find 출력(파일 경로)을 다른 명령어 입력으로 전달할 때 사용합니다.
1
| find . -name "*.txt" | xargs cat
|
- 장점: 여러 파일을 한 번에 처리 → 성능 좋음
- 단점: 파일 이름에 공백/특수문자가 있으면 깨질 수 있음
- 안전하게 사용:
1
| find . -name "*.txt" -print0 | xargs -0 cat
|
4. -exec vs | xargs 비교
| | 특징 | -exec | | xargs |
| |————– | ————————— | ————————— |
| | 동작 | 각 파일마다 명령 실행 | 표준 입력으로 명령 실행 |
| | 공백 처리 | 안전 | 주의 필요 (-0 옵션 필요) |
| | 성능 | \; → 느림, + → 빠름 | 여러 파일 묶어서 → 빠름 |
| | 사용 편의성 | 간단 | 파이프와 조합 필요 |
5. 주의 사항
-exec는 find 전용 옵션이며, 다른 명령어에서는 사용할 수 없음.- 다른 명령어에서 비슷한 기능을 사용하려면
xargs를 활용해야 함.
1
2
| # 예: ls와 xargs로 파일 삭제
ls *.txt | xargs rm
|
6. 결론
- 안전성 우선:
-exec 사용 - 성능 우선, 대량 파일 처리:
xargs 또는 -exec … + 사용 - 공백/특수문자 처리:
-exec 또는 xargs -0 사용