使用以下命令将文件从目录复制A
到时B
rsync
$ rsync -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
filename
调用的文件在传输时A
将暂时被称为表单上的某些内容。也就是说,在名称中添加一些随机字符,直到传输完成。.filename.9Tcfsa
B
rsync
如果我在传输时rsync
用Ctrl+中断,临时文件将保留在.由于我的命令永远不会从 中删除任何文件,因此每次中断都会在 中留下另一个临时文件。这变成了烦人的垃圾。cfilename
.filename.9Tcfsa
B
rsync
B
rsync
B
是否可以停止rsync
并删除临时文件?
更新: 由于其他人似乎没有遇到上述问题,因此我提供了一个带有输出的脚本来演示我在计算机上看到的内容。
脚本rsynctest.sh
:
#/!bin/bash
mkdir -p A
mkdir -p B
echo "Creating a 1 GB file in A..."
dd if=/dev/zero of=A/bigfile bs=1M count=1000 >& /dev/null
echo "Now press CTRL-C to interrupt rsync."
rsync -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
运行脚本两次时的输出:
$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.0]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(521) [generator=3.1.0]
$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.0]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(521) [generator=3.1.0]
$ ls -a B
. .. .bigfile.KvDV0T .bigfile.MbalWJ
$
请注意,最后一个ls
命令显示B
包含两个临时文件。
答案1
答:这是rsync
3.1.0中的一个错误。
这是来自3.1.1.发行说明,
修复了中断时无法删除部分传输临时文件的问题(并且 rsync 不保存部分文件)。
升级您的rsync
.
以前的东西
我刚刚在我的系统上测试了这一点。
tony@trinity:~$ uname -a
Linux trinity 3.2.0-4-686-pae #1 SMP Debian 3.2.73-2+deb7u2 i686 GNU/Linux
tony@trinity:~$ cat /etc/debian_version
7.10
tony@trinity:~$ rsync --version
rsync version 3.0.9 protocol version 30
所以不是完全相同的版本rsync
,而是相同的主要版本。
正如预期的那样,当我点击Ctrl+时c,rsync
会进行清理并且不会留下任何临时文件。
我创建了A/
和B/
,填充了A/
一些文件,然后运行rsync
一次来填充B/
。然后我就跑touch
进去A/
再跑rsync
一次。
我添加了一个-v
,这样我就可以看到它正在处理哪个文件,但如果没有 -v,行为是相同的。
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
archives/floppies.tgz
archives/fromx1.tgz
archives/homestuff.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ cd B
tony@trinity:~/B$ cd archives/
tony@trinity:~/B/archives$ ls -l
total 78620
-rw-r----- 1 tony tony 7031885 Apr 15 14:44 floppies.tgz
-rw-r----- 1 tony tony 7031885 Apr 15 14:37 floppies.tgz.20160415144513
-rw-r--r-- 1 tony tony 13959801 Apr 15 14:44 fromx1.tgz
-rw-r--r-- 1 tony tony 13959801 Apr 15 14:37 fromx1.tgz.20160415144513
-rw-r--r-- 1 tony tony 26136212 Apr 15 14:37 homestuff.tgz
-rw-r----- 1 tony tony 5727535 Apr 15 14:37 legacy-x1-scripts.tgz
-rw-r----- 1 tony tony 6636756 Apr 15 14:37 olddos.tgz
drwxr-xr-x 2 tony tony 4096 Apr 15 14:44 oldsites
drwxr-xr-x 2 tony tony 4096 Apr 15 14:44 temp
没有临时文件。所以,也许因为内容没有改变,rsync
不需要创建临时文件。
这次,我有一个大文件A\
。
tony@trinity:~$ ls -l A/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz
我同步B/
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 575066959 bytes received 31 bytes 10953656.95 bytes/sec
total size is 574996664 speedup is 1.00
然后,完全bigfile.tgz
用其他东西代替。
tony@trinity:~$ ls -l A/
total 572576
-rw-r--r-- 1 tony tony 586311642 Apr 15 14:57 bigfile.tgz
这是一个不同的 tgz 存档,只是一遍又一遍地复制以组成相同的文件大小。
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -l B/
total 561528
-rw-r--r-- 1 tony tony 574996664 Apr 15 14:52 bigfile.tgz
没有临时文件。
重新开始,新文件。
tony@trinity:~$ ls -l A/
total 433908
-rw-r--r-- 1 tony tony 444315604 Apr 15 15:02 bigfile.tgz
同步至B/
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 444369947 bytes received 31 bytes 32916294.67 bytes/sec
total size is 444315604 speedup is 1.00
现在,A/bigfile.tgz
用不同的内容重新创建,
tony@trinity:~$ ls -l A/
total 545312
-rw-r--r-- 1 tony tony 558392040 Apr 15 15:04 bigfile.tgz
这次,运行rsync
with--partial
看看有什么变化。该开关通常会强制rsync
留下部分文件而不是清除它们。
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") --partial A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -l B/
total 464596
-rw-r--r-- 1 tony tony 31424512 Jan 1 1970 bigfile.tgz
-rw-r--r-- 1 tony tony 444315604 Apr 15 15:02 bigfile.tgz.20160415150558
这次,我们rsync
已经创建了一个临时文件(称为 bigfile.tgz),旧文件已被赋予新扩展名。
编辑:再次使用一组测试ls -la
。
tony@trinity:~$ ls -la A/
total 510488
drwxr-xr-x 2 tony tony 4096 Apr 15 15:22 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
sent 522788155 bytes received 31 bytes 22246305.79 bytes/sec
total size is 522724240 speedup is 1.00
所以B/
是同步的,
tony@trinity:~$ ls -la B/
total 510484
drwxr-xr-x 2 tony tony 4096 Apr 15 15:23 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
替换A/bigfile.tgz
并重新同步。
tony@trinity:~$ ls -la A/
total 545320
drwxr-xr-x 2 tony tony 4096 Apr 15 15:24 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 558392040 Apr 15 15:24 bigfile.tgz
tony@trinity:~$ rsync -v -a --backup --suffix=.$(date +"%Y%m%d%H%M%S") A/ B/
sending incremental file list
bigfile.tgz
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
tony@trinity:~$ ls -la B/
total 510484
drwxr-xr-x 2 tony tony 4096 Apr 15 15:25 .
drwxr-xr-x 89 tony tony 4096 Apr 15 15:12 ..
-rw-r--r-- 1 tony tony 522724240 Apr 15 15:22 bigfile.tgz
没有临时文件。
我无法使用 basic 重新创建您描述的行为rsync
。
您确定您的rsync
命令与描述的完全一致,并且您确定它没有在某个地方别名为其他命令吗?
更新:
在另一台机器上使用您的脚本,
tony@matrix:~$ ./rsynctest.sh
Creating a 500 MB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [sender] write error: Broken pipe (32)
tony@matrix:~$ ls -la B/
total 8
drwxr-xr-x 2 tony users 4096 Apr 15 19:54 .
drwxr-xr-x 37 tony users 4096 Apr 15 19:54 ..
tony@matrix:~$ ./rsynctest.sh
Creating a 500 MB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [generator=3.1.1]
tony@matrix:~$ ls -la B/
total 8
drwxr-xr-x 2 tony users 4096 Apr 15 19:54 .
drwxr-xr-x 37 tony users 4096 Apr 15 19:54 ..
tony@matrix:~$ uname -a
Linux matrix 3.12.46-guest-39-a97a54c-x86_64 #4 SMP Mon Aug 10 11:59:25 UTC 2015 x86_64 GNU/Linux
tony@matrix:~$ cat /etc/debian_version
8.3
tony@matrix:~$ rsync --version
rsync version 3.1.1 protocol version 31
另一台机器,这次是 Ubuntu 而不是纯粹的 Debian。
tony@neo:/$ lsb_release -r
Release: 15.10
tony@neo:/$ uname -a
Linux neo 4.2.0-34-generic #39-Ubuntu SMP Thu Mar 10 22:13:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
tony@neo:/$ rsync --version
rsync version 3.1.1 protocol version 31
Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, prealloc
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
tony@neo:~$ vi rsynctest.sh
tony@neo:~$ chmod 755 rsynctest.sh
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [receiver] write error: Broken pipe (32)
rsync: [sender] write error: Broken pipe (32)
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:09 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:10 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..
tony@neo:~$ ./rsynctest.sh
Creating a 1 GB file in A...
Now press CTRL-C to interrupt rsync.
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
tony@neo:~$ ls -la B/
total 8
drwxrwxr-x 2 tony tony 4096 Apr 15 20:10 .
drwxr-xr-x 20 tony tony 4096 Apr 15 20:09 ..