文件与目录排查实战
当同步路径错乱、远端目录被污染、或者你不确定“到底哪一份才是该保留的内容”时,最重要的不是先删,而是先把目录结构看清楚。
1. 先看目录顶层结构
bash
ls -la /opt/obsidian-webdav
ls -la /opt/obsidian-webdav/data
ls -la /opt/obsidian-webdav/data/data这一步适合快速确认:
- 哪一层是真正挂到容器里的数据目录
- 有没有
index.html、404.html这类明显不该出现在同步根里的静态文件 - 当前到底是
blog/还是docs/blog/在被使用
ls -la 选项说明
ls -la 是两个短选项拼在一起:
| 选项 | 全称 | 作用 |
|---|---|---|
-l | long | 详细列表(权限、所有者、大小、修改时间) |
-a | all | 显示所有文件,包括隐藏文件(. 开头的,如 .env、.git) |
对比效果:
bash
ls # 只列文件名
ls -l # 文件名 + 权限 + 大小 + 时间
ls -a # 包含 .env、.git 等隐藏文件
ls -la # 两者都要(最常用)ls -l 输出示例:
-rw-r--r-- 1 www-data www-data 1234 Jun 14 10:30 nginx.conf
drwxr-xr-x 3 root root 4096 Jun 14 09:00 data各字段含义:
-rw-r--r-- 1 www-data www-data 1234 Jun 14 10:30 nginx.conf
│ ││││││││ │ │ │ │ └─── 修改时间 ─┘
│ ││││││││ │ │ │ └──────── 文件大小(字节)
│ ││││││││ │ │ └────────────────── 所属组
│ ││││││││ │ └─────────────────────────── 所属用户
│ ││││││││ └───────────────────────────── 硬链接数
│ └────────┘────────────────────────────── 权限(所有者/组/其他人)
└───────────────────────────────────────── 文件类型(- 文件/d 目录/l 软链接)ll 是 ls -alF(或 ls -l)的快捷别名(alias),不是原生命令。可以通过 alias ll 查看具体映射。
2. 用 find 看目录树,但先收窄范围
bash
find /opt/obsidian-webdav/data/data -maxdepth 2 \( -type f -o -type d \) | sort
find /opt/obsidian-webdav/data/data/docs/blog -maxdepth 2 \( -type f -o -type d \) | sort排障时不要一上来就扫整棵大目录。先限制 maxdepth,能更快看出结构问题。
3. 看最近变动的文件
bash
find /opt/obsidian-webdav/data/data/docs -type f -mmin -20 | sort
find /opt/obsidian-webdav/data/data/docs -type d -mmin -20 | sort这一步很适合判断:
- 手机刚刚同步上来的东西到底落到了哪里
- 最近是哪个子目录在被写入
- 新文件是不是进入了你预期的 Vault 根
4. 安全清空同步数据,但保留配置
bash
find /opt/obsidian-webdav/data/data -mindepth 1 -maxdepth 1 -exec rm -rf {} +这条命令只清空同步数据目录,不会删掉:
docker-compose.yml- Apache 配置片段
- Nginx 站点配置
- 证书文件
适用场景:
- 远端数据已经乱了,决定整体重建
- 想保留 WebDAV 服务本身,只重置同步内容
5. 删除旧副本,而不是保留两套近似目录
例如当真正保留的是:
text
/opt/obsidian-webdav/data/data/docs/blog而顶层旧副本:
text
/opt/obsidian-webdav/data/data/blog已经不再使用时,可以直接删除旧副本:
bash
rm -rf /opt/obsidian-webdav/data/data/blog排障里最怕“看起来两份都像真的”。目录一旦确认,旧副本就应该清掉。
6. 从 Git 重新导入受版本控制的原始内容
bash
git -C /path/to/blog archive --format=tar HEAD docs | ssh your-server 'mkdir -p /opt/obsidian-webdav/data/data/docs/blog && tar -xf - --strip-components=1 -C /opt/obsidian-webdav/data/data/docs/blog'这一步的好处是:
- 只导入 Git 跟踪的原始内容
- 不会把
node_modules、.git、本地缓存带上去 - 很适合在“目录清空后重建远端”这个场景里使用
7. 一次实战中的最小判断顺序
如果你怀疑远端目录错了,先按这个顺序查:
ls -la看顶层结构find -maxdepth 2看子目录分布find -mmin看最近到底写到了哪里- 再决定是删单个旧副本,还是清空整棵同步根
- 最后再考虑从 Git 重导入