2010-12-31 2 views
1

나는 현재 유닉스 자습서를 거칠게 그리고 난이 만나 봤는데 :{} 의 기능;

find ~ -name test3* -ok rm {}\; 

나는 {}\;가하는 일에 대한 궁금 해요. ";"

+1

이 구조는 찾을 특정이다 (실제로 * 일부 명령을 실행 *'-exec' 및 기타 찾기 플래그로). 맨 페이지를 확인해 보겠다.'\;'는 쉘이'; '을 해석하지 못하게하는 것 외에는 정확히 잊어 버렸다. – dmckee

답변

7

{}\; 문자열에 (1) 즉, (a) 파일의 이름은 {} 대신 치환 될 수 있으며, (b) 명령이 끝나는 것을 알 말한다. ";" 쉘에 특별한 의미가 있기 때문에 이스케이프해야합니다 (따라서 백 슬래시). 같은 이유로, 당신은 정말로 'test3 *'문자열을 인용해야합니다. 은 셸이 아닌을 찾으십시오. 을 실행하는 디렉토리에서 일치하는 파일이있는 경우을 찾으면 예상 한 결과를 얻지 못할 것입니다.

따라서 은 찾은 모든 파일에서 (1)이 "rm"을 실행한다고 말합니다.

하지만, 특정 문제에 대한보다 효율적인 솔루션있다 :

find . -name 'test3*' -print | xargs rm -f 
+0

'-f'? find (1) 맨 페이지를 다시 검사 할 수 있습니다. –

+0

나는 항상'rm -f'를 사용합니다. * find *가 파일을 찾더라도 * rm *이 파일을 제거 할 수 있다고 보장 할 수는 없습니다. –

+0

명령은 파일을 무조건적으로 제거합니다. 묻는 사람의 명령은 각 파일에 대해 묻습니다. –

관련 문제