Nextcloud中occ命令用法

<font color=red>occ命令位于Nextcloud根目录中，要使用occ命令必须确保在PHP中启用[posix功能](https://www.php.net/manual/en/book.posix.php)，编译安装时默认启用，如通过软件包安装可能需要单独安装”php-process“扩展</font>
# 1. 文件管理

`occ`命令在Nextcloud中具有三种于管理文件的方式：

```shell
files:cleanup              #清理文件缓存
files:scan                 #重新扫描文件系统
files:scan-app-data        #重新扫描AppData文件夹
files:transfer-ownership   #所有文件和文件夹的所有权都移到了另一个用户，也可以只传送一个目录及其内容。
```

## 1.1 扫描

`files:scan`

该命令将扫描新文件并更新文件缓存。您可以按用户重新扫描所有文件，用空格分隔的用户列表，并限制搜索路径。如果不使用`--quiet`，则统计信息将在扫描结束时显示：

语法格式：

```shell
sudo -u nginx php occ files:scan --help
files:scan [-p|--path="..."] [-q|--quiet] [-v|vv|vvv --verbose] [--all] [user_id1] ... [user_idN]
```

参数说明

```shell
user_id  #将重新扫描指定用户的所有文件
```

选项说明

```shell
--output[=OUTPUT]          #输出格式（纯文本，json或json_pretty，默认为纯文本）[默认：“纯文本”]
-p，--path=PATH            #限制重新扫描到该路径，例如。--path =“/alice/files/Music”，user_id由路径确定，而user_id参数和--all被忽略
--all                      #将重新扫描所有已知用户的所有文件
--unscanned                #仅扫描标记为未完全扫描的文件
--shallow                  #不要递归扫描文件夹
--home-only                #仅扫描主存储，忽略任何已安装的外部存储或共享
-h，--help                 #显示此帮助消息
-q，--quiet                #不输出任何消息
-V，--version              #显示此应用程序版本
--ansi                     #强制ANSI输出
--no-ansi                  #禁用ANSI输出
-n，--no-interaction       #不问任何互动问题
--no-warnings              #跳过全局警告，仅显示命令输出
-v | vv | vvv，--verbose   #增加消息的详细程度：1表示正常输出，2表示更多详细输出，3表示调试
```

<font color=red>**注意事项**</font>

```shell
--unscanned：默认情况下后台通过cron定期进行该扫描。使用-–unscanned选项可以从CLI触发此操作。

--path:路径必须包含以下部分:
"user_id/files/path"
  或
"user_id/files/mount_name"
  或
"user_id/files/mount_name/path"
Example:
--path=/vincent/files/Music
  或
-p /vincent/files/Music

--path:根据文件路径确定[user_id]， 使用此选项就不需指定[user_id]
--all:扫描所有文件，不需要指定[path]或[user_id]
```

**参考`files:scan`的[使用范例](#scan)**

## 1.2 扫描应用数据

`occ files:scan-app-data`

Appdata是数据目录内部的文件夹，其中包含用户之间共享的文件，并且可以由服务器或应用（例如头像图像，文件预览和缓存的CSS文件）放置在该文件夹中。

由于常规文件扫描仅对用户文件起作用，因此该命令将检查appdata目录，并确保文件缓存与实际存储中的文件一致：

语法格式：

```shell
sudo -u nginx php occ files:scan-app-data --help
files:scan-app-data [options] [--] [<folder>]
```

参数说明：

```shell
folder           #要扫描的appdata子文件夹 [default: ""]
```

## 1.3 清理文件缓存

`files:cleanup` 

通过删除存储表中没有匹配条目的所有文件条目来整理服务器的文件缓存。

## 1.4 转移

`files:transfer-ownership`

您可以将所有文件和共享从一个用户转移到另一个用户。这在删除用户之前很有用：

语法格式：

```shell
sudo -u nginx php occ files:transfer-ownership --help
files:transfer-ownership [options] [--] <source-user> <destination-user>
```

也可以只传送一个目录及其内容。该`--path`参数作为从源用户看到的目录路径给出：

```shell
files:transfer-ownership --path="path_to_dir" <source-user> <destination-user>
```

参数说明：

```shell
source-user         #文件的所有者，该文件应被移动
destination-user    #将成为文件新所有者的用户
```

选项说明：

```shell
--path=PATH         #有选择地提供转移途径。 例如--path =“ folder_name”[default: ""]
--move              #将数据从源用户移动到目标用户的根目录，该目录必须为空
```

用户也可以自己选择性地传输文件或文件夹。详细信息可参考[所有权转让](https://docs.nextcloud.com/server/latest/user_manual/en/files/transfer_ownership.html)。

## 1.5 使用范例

### 1.5.1 <span id=scan>添加服务器本地文件到Nextcloud</span>

通过Nextcloud上传的文件和文件夹默认都在`Nextcloud/data/<user_dir>/files`目录下，但是直接将服务器中的文件或文件夹移动至该目录中在Nextcloud里并不会显示这些文件。因为数据库里并没有这个文件的信息，文件信息都被存储在数据库的`oc_filecache`表中。因此需要手动执行`files:scan`重新扫描文件系统将文件索引写入数据库：

- 查看`oc_filecache`表中的部分字段信息：

```sql
select path,name,size from oc_filecache;
```

![image-20210305220013424](https://gitee.com/hrong1123/picture_bed/raw/master/Nextcloud/image-20210305220013424.png)

- 扫描所有用户目录下的文件


```shell
sudo -u nginx php occ files:scan --all
```

![image-20210305203612474](https://gitee.com/hrong1123/picture_bed/raw/master/Nextcloud/image-20210305203612474.png)

- 扫描指定用户目录下的`files`文件夹


```shell
sudo -u nginx php occ files:scan -p /admin/files
```

![image-20210305202148003](https://gitee.com/hrong1123/picture_bed/raw/master/Nextcloud/image-20210305202148003.png)

- 或者扫描指定用户目录下的所有文件


```shell
sudo -u nginx php occ files:scan admin
```

![image-20210305202611072](https://gitee.com/hrong1123/picture_bed/raw/master/Nextcloud/image-20210305202611072.png)

- 扫描完之后就可以在数据库中查询到你添加的文件，刷新Nxetcloud即可看到文件

```sql
select path,name,size from oc_filecache where name="yoko.flac";
```
![image-20210305223048632](https://gitee.com/hrong1123/picture_bed/raw/master/Nextcloud/image-20210305223048632.png)