如果文件之间没有差异,我想保留软链接,如果有差异,我想复制目录。我在用
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
,但这与此处无关。)