rsync命令同步隐藏文件
Contents
1. 概述
在本教程中,我们将讨论将数据从一个目录移动到另一个目录时必须牢记的事项,其中一个有用的工具是*rsync *命令。
例如,一个典型的用例是当我们开发一个从开发到实时系统的网站时。
2. rsync和点文件的问题
让我们假设一个典型的场景。我们有两个包含 Web 内容的文件夹。一是发展路径。另一个是生产路径:
$ ls -las
total 16
4 drwxrwxr-x 4 tracer tracer 4096 Feb 28 13:05 .
4 drwxr-xr-x 39 tracer tracer 4096 Feb 28 13:11 ..
4 drwxrwxr-x 2 tracer tracer 4096 Feb 28 12:57 dev
4 drwxrwxr-x 2 tracer tracer 4096 Feb 28 13:05 prod
我们开发环境的内容:
$ ls -las dev
total 8
4 drwxrwxr-x 2 tracer tracer 4096 Feb 28 12:57 .
4 drwxrwxr-x 4 tracer tracer 4096 Feb 28 13:05 ..
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 12:57 .htaccess
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 12:57 index.html
当我们尝试以这种方式使用rsync命令时,它会给我们一个意想不到的结果:
$ rsync -av dev/* prod
sending incremental file list
index.html
如我们所见,rsync省略了 .htaccess 文件,或者至少看起来是这样。
3.解决方案
当我们省略星号并再次运行命令时:
rsync -av dev/ prod
sending incremental file list
./
.htaccess
index.html
我们可以看到连隐藏文件 .htacces也被复制了。
4. 说明
在这种情况下,我们的问题与 shell 的工作方式有关。有一种称为globbing 的机制,它在实际调用rsync程序之前将星号扩展为文件名。
假设我们还有几个文件:
ls -las dev
total 8
4 drwxrwxr-x 2 tracer tracer 4096 Feb 28 13:22 .
4 drwxrwxr-x 4 tracer tracer 4096 Feb 28 13:05 ..
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 12:57 .htaccess
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 13:22 about.html
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 13:22 home.html
0 -rw-rw-r-- 1 tracer tracer 0 Feb 28 12:57 index.html
让我们发出命令:
rsync -av dev/* prod
在将目录发送到rsync命令之前,shell 会展开目录中的内容。实际上,调用看起来像这样:
rsync -av about.html home.html index.html prod
因此,shell 的 globbing 会忽略点文件,也称为隐藏文件。如果我们只是将目录本身添加为参数,则不会发生通配,rsync甚至会复制点文件。