有没有办法通过 Windows 终端检查 OneDrive 文件是否在本地保存?
- 我想自动检查与项目相关的所有数据文件,而无需用户选择确保所有文件都保存在本地始终保留在此设备上在该文件夹的 OneDrive 同步设置中
- 在文件的属性中,可以看到文件大小和磁盘上的文件大小,但是当我尝试从终端查询文件大小时,它会返回完整的文件大小,即使它没有保存到磁盘(如果我能够查询磁盘大小,这将是一个可行的解决方案):
答案1
我认为可以查询磁盘大小,但如果您碰巧遇到稀疏文件、NTFS 压缩文件或磁盘上其他合法较小的文件,这可能会产生误导。
相反,查询文件属性(与 Hidden/ReadOnly 相同)– 如果文件是不是本地缓存,它将具有Offline
1和RecallOnAccess
属性(分别为位 0x1000 和 0x400000)。
此类文件似乎还具有未记录的Unpinned
属性(0x100000),但我不确定它是否总是所有 3 个属性都存在或者存在某些情况。
同时,“始终保留在此设备上”对应于Pinned
属性 (0x80000)。临时缓存的文件不具有这些属性。
在PowerShell中,(Get-Item $file).Attributes
会有这些标志。
如果您使用裸 Cmd(无法访问 PowerShell),该attrib
命令将显示“访问时调用”作为M
标志,并(我认为)显示“离线” O
。它还允许更改固定/取消固定标志,因此您实际上可以仅通过命令行将文件标记为“始终保留”。
这主要针对 OneDrive。上次我检查时,Dropbox 的工作方式完全不同。
1 Windows 中的该Offline
功能比 OneDrive 早出现数年——它的起源是“分层存储管理”子系统,该子系统允许将未使用的文件卸载到磁带或类似设备。当时,存储在操作系统上的数据是“在线”的,而放在柜子里的数据是“离线”的。有了云存储,含义就发生了变化。