rsync 删除目标中的多余行

rsync 删除目标中的多余行

首先,我在下面详细给出我的目录结构。

src
   1
     1_1.txt
        test_line1
     1_2.txt
        test_line1
   2
     2_1.txt
        test_line1
     2_2.txt
        test_line1

我将此src目录与dst目录同步。所以现在目录与使用以下命令的目录dst相同。srcrsync

rsync -av src/* dst/

出色地。如果我在目录中现有的任何文件中添加一行src,则相同的命令会复制该目录中的更改dst

1_2.txt现在我在目录中添加额外的文本行dst。在这种情况下,srcdst目录不相同。

如果我运行上面的rsync命令,我认为它会从目录中的该文件中删除多余的行dst。但它没有发生。

  1. src我应该怎么做才能保持文件与目录相同dst

  2. 当手动在目录中添加新目录/文件时dst,运行命令时应该提示是否删除该目录/文件rsync。我怎样才能做到这一点?

答案1

我无法重现您所看到的相同行为:

$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files
$ cat s/file
hello
$ rsync -av s/ d
sending incremental file list

sent 63 bytes  received 12 bytes  150.00 bytes/sec
total size is 6  speedup is 0.08

没有传输数据,两个文件已经相同。

$ echo world >>d/file
$ cat d/file
hello
world
$ rsync -av s/ d
sending incremental file list
file

sent 116 bytes  received 35 bytes  302.00 bytes/sec
total size is 6  speedup is 0.04
$ cat d/file
hello

这表明添加到目标目录中文件的行将通过重新运行而被删除rsync -a


要删除目标中源目录中不可用的文件,请使用--delete

$ tree
.
|-- d
|   |-- extra_file
|   `-- file
`-- s
    `-- file

2 directories, 3 files
$ rsync -av --delete s/ d
sending incremental file list
deleting extra_file
./

sent 66 bytes  received 29 bytes  190.00 bytes/sec
total size is 6  speedup is 0.06
$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files

rsync实用程序本身不支持在删除目标上的文件之前进行交互式确认提示。不过,您可以先运行--dry-run一下,看看如果您真正运行副本会发生什么。


另请注意,如果您使用rsync -av s/* d而不是rsync -av s/ d,那么您将不会复制源目录中的任何隐藏文件或目录。这是因为*默认情况下 glob 模式不会扩展到隐藏文件名。但源目录子目录中的隐藏文件仍会被复制。

相关内容