Nextcloud 是 ownCloud 创始人发起的分支项目,是一款用于自建企业云存储(私有网盘)的开源软件。支持 PC、IOS 和 Android 三个同步客户端,用户可以很方便地与服务器上存储的文件、日程安排、通讯录、书签等重要数据保持同步。它还支持将数据保存到第三方存储中:Amazon S3、Dropbox、FTP、Google Drive、SMB、WebDAV、SFTP等。
Nextcloud云盘有个方便的地方就是可以直接在文件系统中操作,可以直接进行增、删,这样备份和整理文件非常方便。Nextcloud除了提供web管理界面,也可以采用运维控制命令occ进行维护。
occ命令位于Nextcloud根目录中,要使用occ命令必须确保在PHP中启用posix功能,编译安装时默认启用,如通过软件包安装可能需要单独安装”php-process“扩展.

1.occ使用基础

occ需采用occ文件拥有者运行

#增加'sudo -u #1000'运行
sudo -u #1000 php /var/www/html/occ
#docker exec运行时增加 -u 参数
docker exec -u 1000 it nextcloud php /var/www/html/occ

2. 文件管理

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

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

2.1 扫描 files:scan

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

  • 语法格式:
    sudo -u nginx php occ files:scan --help
    files:scan [-p|--path="..."] [-q|--quiet] [-v|vv|vvv --verbose] [--all] [user_id1] ... [user_idN]
  • 参数说明
    user_id  #将重新扫描指定用户的所有文件
  • 选项说明
--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表示调试
  • 注意事项
--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]
  • 范例
docker exec -u 1000 nextcloud nextcloud php /var/www/html/nextcloud/console.php files:scan --all
docker exec -u 1000 nextcloud php /var/www/html/nextcloud/console.php files:scan --path lee/files/
sudo -u www-data php /var/www/html/nextcloud/console.php files:scan --all
#扫描指定用户目录下的所有文件
sudo -u www-data php /var/www/html/nextcloud/console.php files:scan lee

《nextcloud云盘使用OCC文件整理》

2.2 扫描应用数据 occ files:scan-app-data

Appdata是数据目录内部的文件夹,其中包含用户之间共享的文件,并且可以由服务器或应用(例如头像图像,文件预览和缓存的CSS文件)放置在该文件夹中。
由于常规文件扫描仅对用户文件起作用,因此该命令将检查appdata目录,并确保文件缓存与实际存储中的文件一致:

  • 语法格式:
sudo -u nginx php occ files:scan-app-data --help
files:scan-app-data [options] [--] [<folder>]
  • 参数说明:
folder           #要扫描的appdata子文件夹 [default: ""]

2.3清理文件缓存 files:cleanup

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

2.4 转移 files:transfer-ownership

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

  • 语法格式:

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

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

    files:transfer-ownership --path="path_to_dir" <source-user> <destination-user>
  • 参数说明:

source-user         #文件的所有者,该文件应被移动
destination-user    #将成为文件新所有者的用户
  • 选项说明:
--path=PATH         #有选择地提供转移途径。 例如--path =“ folder_name”[default: ""]
--move              #将数据从源用户移动到目标用户的根目录,该目录必须为空

用户也可以自己选择性地传输文件或文件夹。

2.5 使用范例

2.5.1 添加服务器本地文件到Nextcloud

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

  • 查看oc_filecache表中的部分字段信息:
select path,name,size from oc_filecache;

《nextcloud云盘使用OCC文件整理》

  • 扫描所有用户目录下的文件
sudo -u nginx php occ files:scan --all
  • 扫描指定用户目录下的files文件夹
sudo -u nginx php occ files:scan -p /admin/files
  • 或者扫描指定用户目录下的所有文件
sudo -u nginx php occ files:scan admin
  • 扫描完之后就可以在数据库中查询到你添加的文件,刷新Nxetcloud即可看到文件
select path,name,size from oc_filecache where name="yoko.flac";