Nginx中rsync查看远程目录的实现并不只看表面做法,关键还要理解相关条件、限制和后续影响。
在使用 rsync 同步 Nginx 静态资源或配置文件之前,你是否曾有过这样的疑问:

直接登录服务器用 ls 命令固然可行,但这破坏了自动化的流畅性。幸运的是,rsync 本身就内置了一个强大的功能——--list-only 选项,让你无需登录,就能像本地 ls 一样清晰地看到远程目录的全貌。
下文会详细介绍如何利用这个选项,并结合 SSH 和 Daemon 两种模式,为你提供最实用的操作指南。
--list-only 是 rsync 的一个非常实用但常被忽视的选项。它的作用是:
这使得它成为部署前检查和状态确认的完美工具。
这是最安全、最常见的场景。假设你需要查看一台 Nginx 服务器(IP: 192.168.1.100)上 /var/www/html/ 目录的内容。
rsync -av --list-only [email protected]:/var/www/html/
-a: 归档模式,确保输出包含完整的文件属性(权限、时间等)。-v: 详细模式,让输出更易读。--list-only: 核心选项,只列出不传输。receiving incremental file listdrwxr-xr-x 4,096 2026/06/20 10:30:22 .-rw-r--r-- 543 2026/06/19 15:22:10 index.html-rw-r--r-- 2,345 2026/06/18 09:11:05 app.jsdrwxr-xr-x 4,096 2026/06/15 14:00:00 static/
从输出中,你可以清晰地看到每个文件的权限、大小、修改时间和名称。
如果你已经配置了 SSH 公钥认证,命令可以直接在脚本或 CI/CD 流水线中无交互地运行:
# 假设你的私钥在 ~/.ssh/nginx_deploy_keyrsync -av -e "ssh -i ~/.ssh/nginx_deploy_key" --list-only [email protected]:/var/www/html/
如果你的架构使用了 rsync 守护进程,查看方式略有不同。
假设服务端配置了一个名为 webdata 的模块,指向 /data/web/ 目录。
# 如果模块不需要密码rsync -av --list-only rsync://192.168.1.100/webdata/# 如果模块需要密码,使用密码文件rsync -av --password-file=/path/to/rsync.pass --list-only rsync://[email protected]/webdata/
这里的 URI 格式为 rsync://[user@]host[:port]/module/。
--list-only 可以和 rsync 的其他过滤选项完美结合,实现更精细的“侦察”。
例如,只想看所有的 .js 和 .css 文件:
rsync -av --list-only --include='*.js' --include='*.css' --exclude='*' [email protected]:/var/www/html/
默认会递归列出所有子目录。如果只想看顶层目录,可以使用 --max-depth:
# 只列出 /var/www/html/ 下的直接子项,不进入子目录rsync -av --list-only --max-depth=1 [email protected]:/var/www/html/
很多同学会混淆 --list-only 和 --dry-run (-n)。
对于单纯的“查看远程有什么”的需求,--list-only 是更直接、更高效的选择。