rsync 无法排除相关文件?

rsync 无法排除相关文件?

我知道 rsync 中的排除选项只能接受相对路径,所以我想我可以使用realpath --relative.

$ls /usr/local/bin
cppman  demangle  e  fusuma  rem  triangle
$realpath --relative-to=$PWD /usr/local/bin/cppman
../../usr/local/bin/cppman
$rsync -va --delete --exclude=$(realpath --relative-to=$PWD /usr/local/bin/cppman) /usr/local/bin /home/user1/Desktop/transport/
created directory /home/shepherd/Desktop/transport
bin/
bin/cppman
bin/demangle
bin/e
bin/fusuma
bin/rem
bin/triangle

sent 26,689 bytes  received 189 bytes  53,756.00 bytes/sec
total size is 26,215  speedup is 0.98

如您所见,该文件cppman不是尽管是相对的,但仍被排除在外。为什么?

答案1

排除路径相对于您的源(“传输的根目录”)开始,而不是您当前的工作目录。由于bin是要传输的目录,因此路径为/bin/cppman

rsync -va --delete --exclude=/bin/cppman /usr/local/bin /home/user1/Desktop/transport/

或无锚定(没有前导/):

rsync -va --delete --exclude=bin/cppman /usr/local/bin /home/user1/Desktop/transport/

如果您有两个文件/usr/local/bin/cppman/usr/local/bin/foo/bin/cppman,则非锚定版本将排除这两个文件,而第一个命令将排除第一个文件。

相关内容