不要在rsync输出中显示目录。

32

有没有人知道是否有一个rsync选项,可以在遍历目录时不会在stdout上显示。

我正在同步音乐库,大量的目录让我很难看到实际发生了哪些文件变化。 我已经尝试过-v和-i,但两者都会显示目录。

2个回答

34
如果您在rsync命令中使用--delete,调用grep -E -v '/$'的问题是它会省略诸如以下信息行的内容:
deleting folder1/
deleting folder2/
deleting folder3/folder4/

如果你正在备份,而由于某种原因远程文件夹已经被彻底清空,那么它也会清除你的本地文件夹,因为你看不到删除行。

如果想要同时省略已存在的文件夹和保留删除行,可以使用以下表达式:

rsync -av --delete remote_folder local_folder | grep -E '^deleting|[^/]$'

5
好的回答。对于文件同步,我喜欢在执行命令之前进行模拟运行,因此我使用了“-n”选项。为了提高可读性,我修改了grep正则表达式以包括空行:`rsync -av --delete remote_folder local_folder | grep -E'^deleting|[^/]$|^$'` - Anthony Geoghegan
我还在grep命令中添加了--color=never,以避免不必要的匹配字符高亮显示。 - Roger Dueck

14

我会倾向于使用管道过滤器 grep -E -v '/$' 进行筛选,它使用一个行尾锚点来删除以斜杠结尾的行(目录)。

以下是我检查它的演示终端会话...

cefn@cefn-natty-dell:~$ mkdir rsynctest
cefn@cefn-natty-dell:~$ cd rsynctest/
cefn@cefn-natty-dell:~/rsynctest$ mkdir 1
cefn@cefn-natty-dell:~/rsynctest$ mkdir 2
cefn@cefn-natty-dell:~/rsynctest$ mkdir -p 1/first 1/second
cefn@cefn-natty-dell:~/rsynctest$ touch 1/first/file1
cefn@cefn-natty-dell:~/rsynctest$ touch 1/first/file2
cefn@cefn-natty-dell:~/rsynctest$ touch 1/second/file3
cefn@cefn-natty-dell:~/rsynctest$ touch 1/second/file4

cefn@cefn-natty-dell:~/rsynctest$ rsync -r -v 1/ 2
sending incremental file list
first/
first/file1
first/file2
second/
second/file3
second/file4

sent 294 bytes  received 96 bytes  780.00 bytes/sec
total size is 0  speedup is 0.00


cefn@cefn-natty-dell:~/rsynctest$ rsync -r -v 1/ 2 | grep -E -v '/$'
sending incremental file list
first/file1
first/file2
second/file3
second/file4

sent 294 bytes  received 96 bytes  780.00 bytes/sec
total size is 0  speedup is 0.00

6
我自己得出了同样的结论。仅仅因为rsync没有一个开关可以做到这一点,看起来很愚蠢。感谢您的建议! - Koen Weyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接