찾기 명령이 여러 파일을 복사하지 못함

찾기 명령이 여러 파일을 복사하지 못함

마지막 순간에 생성된 파일을 복사하려면 아래 명령을 사용하고 있습니다. 이 명령이 포함된 스크립트를 1분마다 실행하여 파일이 a/b/c 위치에 생성되는 즉시 복사되도록 예약합니다. 그러나 이 명령은 때때로 하나 이상의 파일을 복사하는 데 실패합니다. find 명령에 단점이 있습니까? 아니면 다음 명령에 오류가 있습니까?

find /a/b/c -type f -mmin -1 -exec cp {} /x/y/z \;

답변1

타임스탬프 플래그를 사용하면 find얼마나 오래되었는지에 관계없이 마지막 실행 이후의 모든 파일을 가져올 수 있습니다. $trigger정의를 좀 더 적절한 것으로 바꿔 주시기 바랍니다 .

trigger=/tmp/trigger

touch "$trigger.new"
test ! -f "$trigger" && touch "$trigger"

find /a/b/c -newer "$trigger" -type f -exec cp -f {} /x/y/z +
mv -f "$trigger.new" "$trigger"

다음과 같은 경우에는 여전히 실패합니다.시간파일 쓰기가 완료된 후 재설정됩니다.

소스 파일에 쓰는 동안 이 코드가 실행 중이면 여전히 실패합니다. 소스 파일이 원자적으로 표시된다는 것을 보장할 수 없다면 이를 방지할 가치가 있습니다. 이를 처리하는 한 가지 방법은 .tmp접미사를 사용하여 파일을 작성 .part하고 완료되면 보낸 사람이 이름을 바꾸는 것입니다. 여기의 트리거 스크립트는 이름이 ( 또는 ) 로 끝나는 파일을 find제외하도록 수정됩니다 ..tmp.part

을 사용할 수도 있지만 rsync소스의 디렉터리 경로가 대상에 복사되므로 원하는 결과가 아닐 수도 있다는 점에 유의하세요. 위의 코드 조각을 다음 줄로 바꿉니다.

rsync -a /a/b/c/ /x/y/z/

관련 정보