"find" 명령에서 "\;"는 무엇을 의미합니까? [복사]

"find" 명령에서 "\;"는 무엇을 의미합니까? [복사]

명령은 \; 무엇을 의미합니까 ? 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/pathbasename /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-execmv

관련 정보