rsync 仅在未修改时才将接收器上的符号链接目录视为目录,否则它将复制该目录

rsync 仅在未修改时才将接收器上的符号链接目录视为目录,否则它将复制该目录

如果文件之间没有差异,我想保留软链接,如果有差异,我想复制目录。我在用

rsync -rk src dis

在 src 中,我有目录:dir1file1file2,并且在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,但这与此处无关。)

相关内容