问题

有时候,我们因为网络原因想直接在服务器下载文件,然后把文件拷贝到Nextcloud的data目录下,再通过客户端自动同步到本地。可是我们拷贝到data对应目录之后,打开Nextcloud客户端不断刷新,What?添加的文件并没有出现。

Why?

这是因为通过web或者客户端访问的时候,Nextcloud是通过查询数据库中的文件信息来返回服务器上的,我们手动拷贝进去的文件信息并没有提交到数据库中,我们在web和客户端中当然就看不到这些文件了。

解决之道

好在Nextcloud提供了一个强大的命令行工具occ,您可以使用occ执行许多常见的服务器操作,例如安装和升级Nextcloud,管理用户,加密,密码,LDAP设置等。

occ文件默认情况下在Nextcloud的根目录下,occ有三个用于管理Nextcloud中文件的命令:

files:cleanup 清除文件缓存
files:scan 重新扫描文件系统
files:transfer-ownership 将所有文件和文件夹都移动到另一个文件夹

看样子files:scan可以解决我们的问题,files:scan的用法如下:

格式:

files:scan -p|--path="..."-v|vv|vvv --verbose[user_id1] ... [user_idN]

参数:

user_id 扫描所指定的用户(一个或多个,多个用户ID之间要使用空格分开)的所有文件

选项:

--path 限制扫描路径
--all 扫描所有已知用户的所有文件
--quiet 不输出统计信息
--verbose 在扫描过程中显示正在处理的文件和目录
--unscanned 仅扫描以前未扫描过的文件

扫描所有用户的所有文件,www是data目录的所有者,data目录是Nextcloud创建的,就是以哪个用户启动的Web服务器的,所有者就是谁。

sudo -u www php occ files:scan --all

occ文件位于Nextcloud的根目录下,如果当前目录不是Nextcloud的根目录,则需要补全occ的路径。

如果你给occ文件添加了可执行权限,那我们的命令里面可以省略php,occ文件开头已经指定了由php执行。

执行命令后进行扫描并列出扫描信息,如果不想显示扫描信息,可以在后面加上 --quiet 选项。
请输入图片描述

扫描指定目录下的文件

Nextcloud文件储存在data文件目录中,扫描指定用户的文件基本上就是扫描指定用户目录下的文件。可通过使用--path选项指定扫描的路径,路径应为相对于data目录的相对路径,

如我把文件存放到/var/www/Nextcloud/data/redtux/files/Documents中,现在需要扫描该目录:

sudo -u www php occ files:scan --path=redtux/files/Documents

执行命令后进行扫描并列出扫描信息。
请输入图片描述

扫描指定用户的文件

Nextcloud是目录的形式组织不同用户的文件,扫描指定用户的文件基本上就是扫描指定用户目录下的文件。

如扫描用户user1的文件:

sudo -u www php occ files:scan user1

相当于

sudo -u www php occ files:scan --path=user1/files
Last modification:November 26th, 2019 at 01:13 pm