
파일간 차이가 없으면 소프트링크를 유지하고, 차이가 있으면 디렉터리를 복사하고 싶습니다. 나는 사용하고있다
rsync -rk src dis
src에는 디렉토리가 있습니다. dir1
거기 file1
에 (소프트 링크) file2
가 dis
있습니다. 실행할 때만 복사 됩니다 . 파일이 복사되는 것을 원하지 않습니다. 소프트 링크를 제거하고 복사하고 싶습니다.dir1->/home/dir1
/home/dir1/
file1
rsync -rk src dis
file2
/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
여기서는 관련이 없습니다.)