以下是rsync错误还是我想让rsync具有的功能? (即,我应该报告它吗? 编辑:我在这里报告了它:https://bugzilla.samba.org/show_bug.cgi?id=13582)
以下测试脚本显示,尝试通过使用排除文件列表中的/sourcedir/a/file2
来排除文件//sourcedir//a//////file2
,因为所有这些相邻的斜杠都不会减少为一个{{1} }。
/
有时相邻斜杠可以进入该排除文件列表文件的原因是,例如,当某个脚本生成该文件并且正在执行类似#!/bin/bash
mkdir -p destdir sourcedir/a
touch sourcedir/file1 sourcedir/a/file2
echo 'sourcedir' >/tmp/filesfrom.list.tmp
echo '//sourcedir//a//////file2' >/tmp/excluded.list.tmp #this won't work unless rsync gets patched
#echo '/sourcedir/a/file2' >/tmp/excluded.list.tmp #yes this will work: [sender] hiding file sourcedir/a/file2 because of pattern /sourcedir/a/file2
rsync --recursive --perms --delay-updates --files-from=/tmp/filesfrom.list.tmp --exclude-from=/tmp/excluded.list.tmp --delete-excluded --debug=FILTER1 -- ./ ./destdir/
if test -r 'destdir/sourcedir/a/file2'; then
echo 'test failed'
else
echo 'test succeeded'
fi
#cleanup
rm -rf -- destdir sourcedir
rm -- /tmp/excluded.list.tmp /tmp/filesfrom.list.tmp
的操作时,其中${SOMEVAR}/somedir/somefile
已经包含结束斜杠。
我制作了一个rsync patch(语法色)以将那些连续的斜杠压缩成一个斜杠,但是我不知道它有多好(如您所见,它也很笨拙)在我看来确实不错(可能是因为我做到了),而且效果很好。我在这里复制它(但是制表符可能会转换为空格-因此请获取raw patch here):
$SOMEVAR