# find 조건 -exec ls -al {} \;
-exec의 의미는 '조건을 가지고 찾은 파일들을 대상으로 다음 명령어를 실행하라' 라는 의미를 가지고 있다.
그럼 어디까지가 실행 시킬 명령어인지가 중요하다.
실행시킬 명령어의 범위는 -exec 다음부터 ;(세미콜론)을 만날 때 까지로 정의되어 있다. 그런데 ;(세미콜론)은 유닉스에서 좀 특별한 의미를 가지고 있습니다. 명령어 세퍼레이터라고 해서 명령어를 연속적으로 실행할 때 사용한다. 예를들어 clear;ls하면 cleaer가 실행된다음 ls가 실행되는 식.
따라서
find 조건 -exec 실행시킬 명령어 ;
이렇게만 쓰면 쉘이 ;(세미콜론)을 특수한 문자로 인식해서 find라는 명령어게는 ;(세미콜론)이 전달되지 않게 된다.
그러면 find는 어디까지가 실행시킬 명령어인지 알 길이 없음. 그래서 에러가 난다.
그래서 ;(세미콜론)의 특수한 의미를 제거하기 위해 세미콜론 앞에 \(백슬래쉬)를 사용하는 것.
백슬래쉬(\)는 이스케이핑 문자라고 해서 바로 뒤에 오는 특수문자의 특수한 의미를 제거하는데 사용된다. (당연히 \와 ;는 붙여써야함)
정리하면 find에서 찾은 파일들을 대상으로 특별한 명령어를 실행시키고자 하는 경우
find 조건 -exec 실행시킬 명령어 \; 와 같은 형식으로 사용하면 되는 것.
그 다음 {}의 의미는 찾은 파일을 의미한다.
이건 붙여쓰기로 약속되어 있는 것으로 띄어쓰면 당연히 안됨.
## 예를 들어 보자.
#find ./ -type f -mtime +20 -ls -exec egrep -s -i -H 'tpcall' ULOG.* {} \; > test.txt
./ => 현재 디렉토리에서
-type f => 일반 파일 유형으로
mtime +20 => 20일 이상된 거 ls -l 하고
-exec => 실행해라
egrep -s -i -H => -i 대소문자 구분없이 -H 파일이름이랑 파일내용 싹다 -s 에러메세지 외엔 출력하지 말고
'tpcall' => 이놈을
ULOG.* => ULOG 이름으로 된 파일 모두
{} => 이렇게 찾은 놈들 모두를
\; => 여기까지 (얘네 둘은 항상 같이 쓴다)
'OS > Linux&Unix' 카테고리의 다른 글
[Unix&Linux] NFS가 실행 중인지 확인(Linux 및 UNIX) (0) | 2023.01.06 |
---|---|
[Linux/Unix] stdin, stdout, stderr, and pipes (0) | 2022.12.27 |
[Linux/Unix] 2>&1 이해하기 (0) | 2022.12.22 |
[Linux/Unix] AIX - machine 전체 CPU 및 Core 수 확인 (0) | 2022.12.22 |
[Unix/Linux] nohup 사용하여 쉘스크립트 계속 실행하기 (0) | 2022.12.07 |