AIX에서 cp로 파일 덮어쓰기를 방지하는 방법은 무엇입니까?

AIX에서 cp로 파일 덮어쓰기를 방지하는 방법은 무엇입니까?

우리는 디렉터리 트리 구조를 유지하면서 2일보다 오래된 일부 대용량 파일을 정기적으로 NAS에 보관해야 합니다. 이러한 파일은 7일 동안 소스 디렉터리에 유지됩니다.

처음에 우리는 find이것을 위해 다음을 사용했습니다:

find ${SOURCE_DIR} -type f -mtime +2 -exec ksh -c 'mkdir -p $(dirname ${DEST_NAS_DIR}$0) && cp -p $0 ${DEST_NAS_DIR}$0' {} \;

그러나 우리는 스크립트가 이미 보관된 파일을 복사하고 있어서 각 실행에 너무 많은 시간이 걸리는 것을 발견했습니다.

cp에는 -n/--no-clobber 옵션이 없습니다. 그렇다면 대상에서 동일한 파일을 덮어쓰는 것을 어떻게 방지할 수 있습니까? 어떤 아이디어가 있나요?

인사!

답변1

rsync시스템에서 사용 가능한 경우 해당 --ignore-existing플래그를 사용할 수 있습니다.

find ${SOURCE_DIR} -type f -mtime +2 \
  -exec rsync --ignore-existing '{}' ${DEST_NAS_DIR} \;

아마도 이 -u플래그는 흥미로울 수 있습니다. 보낸 사람이 기존 파일의 업데이트 버전도 가지고 있는지 확인하고 그렇다면 업데이트합니다.

--archive스키마를 활성화 할지 확인하세요 . 이는 시간, 소유권 등에 대한 일부 정보를 반복하고 유지하는 것을 의미합니다. 자세한 내용 보기 man rsync.

답변2

다음 방법을 사용하여 부정행위를 시도할 수 있습니다.

...yes n|cp -i -p $0 ${DEST_NAS_DIR}$0' {}...

불행하게도 이것을 테스트할 AIX가 없지만 이를 위해서는 기존 파일을 덮어써야 하며 'n'을 보내면 이를 방지할 수 있습니다.

PS 현재는 테스트해 볼 곳이 없으니, 실제 파일을 사용하기 전 테스트를 해주시기 바랍니다.

관련 정보