我知道 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
,则非锚定版本将排除这两个文件,而第一个命令将排除第一个文件。