Answers:
使用此命令:
rsync --archive --verbose --compress --ignore-existing --delete /var/www/ root@mydomaintest.com:/var/www
您不需要“ *”,也不要使用它。
要排除/包括文件或目录,应使用以下参数:
--exclude 'to_exclude*'
--include 'to_include*'
--recursive
-a
您的命令无法正常工作,因为当您使用它/var/www/*
作为源代码时,您的外壳正在对其执行globing操作,即外壳正在扩展*
到该目录中的所有文件并逐个复制文件,因此这里的单个文件已成为源,而不是父目录。
因此,如果使用/var/www/*
,则不需要--recursive
选项,因为*
它将导致文件被复制(以及包含其内容的所有目录),而不是包含文件的父目录。由于同样的原因,--delete
它无法正常工作,因此--delete
将从目标目录中删除不在源目录中的文件,但是您正在复制文件,因此不会删除文件(可能是这样)。
这将使您更加清楚:
/foo$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test
/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
$ rsync -avz --ignore-existing --recursive --delete
/foo/* /bar/
+ rsync -avz --ignore-existing --recursive --delete
/foo/egg /foo/spam /foo/test /bar/
sending incremental file list
test/
test/hello
sent 173 bytes received 39 bytes 424.00 bytes/sec
total size is 0 speedup is 0.00
/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test
如您所见,我使用了源代码,/foo/*
因此rsync
正在执行的命令是
rsync -avz --ignore-existing --recursive --delete /foo/egg
/foo/spam /foo/test /bar/
使用*
shell进行扩展,并单独将所有文件作为源参数,而不是整个父目录(--recursive
在这种情况下您也不需要)。
因此,如果要进行--delete
工作,请按以下方式运行它:
rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/