如何同步两个目录?

Ziu*_*Ziu 2 mount file-copy synchronization

我想使用 crontab 在我的 linux 分区和 windows 分区之间同步两个目录,如下所示:

24 9 * * * cp -r /home/fan/Data /media/T/Data
Run Code Online (Sandbox Code Playgroud)

但它会在原始数据目录中创建一个名为 Data 的目录,而不是从源目录复制丢失的文件。我在 cp 手册中找不到合适的选项来完美解决这个问题。我如何将丢失的文件(它们确实存在于目标目录中)从 src 复制到 dir。

顺便说一句,似乎需要挂载T盘才能运行复制命令,如何在需要运行命令时自动挂载磁盘(挂载命令应以root身份运行)。

如果命令有异常,我如何获得错误消息?

slm*_*slm 7

用于同步数据的工具是rsync. 您可以在目录级别或仅在目录级别同步,如下所示:

例子

目录同步
24 9 * * * rsync -a /home/fan/Data /media/T/
Run Code Online (Sandbox Code Playgroud) 内容同步
24 9 * * * rsync -a /home/fan/Data/ /media/T/Data/
Run Code Online (Sandbox Code Playgroud)

第一个示例将目录Data从同步/home/fan到目录/media/T。第二个示例将 的内容同步Data到目录/media/T/Data

作为附加提示,我将使用此符号同步到目标目录:

24 9 * * * rsync -a /home/fan/Data/ /media/T/Data/.
Run Code Online (Sandbox Code Playgroud)

/.在阅读我的rsync命令时,我发现更明显。

行为示例

使用rsync可能是我在培训新用户时遇到的最困惑的问题之一。

样本数据:

$ tree home/fan/Data/
home/fan/Data/
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5
Run Code Online (Sandbox Code Playgroud) 1. 同步目录数据的内容
$ rsync -a home/fan/Data/ media/T/
Run Code Online (Sandbox Code Playgroud)

请注意,我们将 的内容Data放入T.

$ tree media/T/
media/T/
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5

0 directories, 5 files
Run Code Online (Sandbox Code Playgroud) 2.同步目录
$ rsync -a home/fan/Data media/T/
Run Code Online (Sandbox Code Playgroud)

请注意,我们将目录Data放入T.

$ tree media/T/
media/T/
`-- Data
    |-- file1
    |-- file2
    |-- file3
    |-- file4
    `-- file5

1 directory, 5 files
Run Code Online (Sandbox Code Playgroud)