rsync는 싱크의 심볼릭 링크 디렉터리가 수정되지 않은 경우에만 디렉터리로 처리합니다. 그렇지 않으면 디렉터리를 복사합니다.

rsync는 싱크의 심볼릭 링크 디렉터리가 수정되지 않은 경우에만 디렉터리로 처리합니다. 그렇지 않으면 디렉터리를 복사합니다.

파일간 차이가 없으면 소프트링크를 유지하고, 차이가 있으면 디렉터리를 복사하고 싶습니다. 나는 사용하고있다

rsync -rk src dis

src에는 디렉토리가 있습니다. dir1거기 file1에 (소프트 링크) file2dis있습니다. 실행할 때만 복사 됩니다 . 파일이 복사되는 것을 원하지 않습니다. 소프트 링크를 제거하고 복사하고 싶습니다.dir1->/home/dir1/home/dir1/file1rsync -rk src disfile2/home/dir1//home/dir1/src/dir1/

답변1

한 번의 통화로는 이것이 가능하지 않다고 생각합니다 rsync. rsync파일이 변경되었는지 테스트하여 이 문제를 해결하고 변경된 경우 복사를 수행합니다 .

# Setup
mkdir /tmp/710162
cd /tmp/710162

mkdir -p src/dir1 dis home/dir1
date >src/dir1/file1
cp -p src/dir1/file1 home/dir1
ln -s /tmp/710162/home/dir1 dis/dir1

암호

if rsync --dry-run --keep-dirlinks -ai src/ dis | grep -q '^[^.]'
then
    echo "Changes found"
    rsync -ai src/ dis
fi

설치 후 즉시 실행한 결과: 없음(즉, 심볼릭 링크는 동일하게 유지되고 파일은 변경되지 않음)

who >src/dir1/file2

새 파일을 추가한 후의 결과:

Changes found
.d..t...... ./
cd+++++++++ dir1/
>f+++++++++ dir1/file1
>f+++++++++ dir1/file2

이 시점에서 심볼릭 링크가 제거되고 소스 파일의 복사본이 새로 생성된 dir1디렉터리에 배치됩니다.

(조건을 테스트하는 데 사용되는 테스트와 복제를 수행하는 데 사용되는 테스트 사이에 경쟁 조건이 있을 수 있지만 rsync여기서는 관련이 없습니다.)

관련 정보