명령은 \;
무엇을 의미합니까 ? find
그것을 사용하는 이유는 무엇입니까?
매뉴얼에서 다음 예를 찾을 수 있습니다.
find . -type f -exec file '{}' \;
왜 안 돼: find . -type f -exec file '{}'
?
답변1
명령 find
에는 실행되어야 하는 명령이 -exec
끝나는 위치를 알려주는 방법이 있어야 합니다. ;
명령 끝에 하나가 없으면 find
명령이 끝나는 위치와 (아마도) 다른 플래그가 계속되는 위치를 알 수 없습니다 find
.
basename
모든 파일과 모든 디렉터리 ls
에서 실행되는 무의미한 예 :
find . '(' -type f -exec basename {} ';' ')' -o '(' -type d -exec ls {} ';' ')'
;
위 사항이 없으면 실행 여부 등을 find
모르겠습니다 .basename /some/path
basename /some/path ')' -o '(' ...
;
쉘이 이를 명령 구분 기호로 처리하지 않도록 just 를 인용하거나 이스케이프하십시오 .
덜 의미 없는 예는 먼저 .txt
파일을 특정 디렉터리에 복사한 다음 .done
해당 이름을 추가하여 원본 파일의 이름을 바꿉니다(복사가 성공한 경우).
find . -type f -name '*.txt'
-exec cp {} /some/path/dest ';' \
-exec mv {} {}.done ';'
(Eliah Kagan이 주석에서 지적했듯이 이 구성은 {}.done
엄격히 이식이 불가능하지만구현 정의. 구현에서는 {}
문자를 현재 경로 이름으로 확장하지 않도록 선택할 수도 있습니다 . 내 경험상 모든 find
구현은하다{}
이와 같은 다른 문자열과 연결해도 현재 경로 이름으로 확장됩니다. )
;
이전 예에서 이것이 없었다면 발견된 파일과 이름이 지정된 파일 등에 대해 명령을 실행 find
하려는지 알 수 없었을 것입니다 .cp
/some/path/dest
-exec
mv