对小编来说, 存储服务器通过一番折腾,已经搞到不得不上Next Cloud的地步。本来服务器里面已经有了一堆文件, 如果无脑把文件拷贝出来, 再网页里传进去, 显然out了。
怎么用shell命令用最快时间把文件传进去呢?
首先要确定next cloud用户放置的路径, 本篇就拿/mnt/pool/nextcloud/data/user1/files举例, 小编使用了docker快速创建了一个next cloud应用, 新建的用户user1, 会把实际的文件放到这个路径里。
接下来开始正式操作,用mv迁移文件, 因为迁移的时间一般比较长, 直接nohup挂着, 避免中断
nohup mv /源数据文件夹路径/* /mnt/pool/nextcloud/data/user1/files/ 2>&1 &
注意,迁移文件的时候无论如何不要无聊写/dev/null的字样在里面,和rm -rf /*是几乎一样的效果,多一行命令把日志删了而已,难不成你工作不想要了?小编这是血的教训啊……
跑完了之后, 记得改一下迁移后的文件权限:
cd /mnt/pool/nextcloud/data chmod -R 770 files && chown -R www-data:www-data files
小编这里有一个特殊需求, 要同时在服务器里开一个SMB只读共享服务和网盘的服务打通, 为了避免ACL报错, 所以命令和以上不太一样, 长成这样
chmod -R 771 files && chown -R www-data:www-data files && chmod 771 /mnt/pool/nextcloud/data
这样一来, 文件的权限梳理干净了。就可以运行扫描了, 这里小编要运行nextcloud docker下的/var/www/html目录用php执行一个occ命令, 命令如下
cd /var/www/html sudo -u www-data php occ files:scan user1
意思就是让nextcloud给user1扫一下未从网页口径进来的文件入个库记个账。
搜老外网站发现老外在问这种命令:
sudo -u www-data php occ files:scan --unscanned --all
里面多了一个--unscanned参数, 可以节省很多扫描时间, 可惜官方没实现, 跑不通, 用了之后新扫描所得文件数始终等于0。于是改了一下,方法变为:
sudo -u www-data php occ files:scan --path=用户名/files/xxx
没错, 把--unscanned这个参数干掉了, 用--path来指定确切位置。这个path参数的用法说明一下:
--path=<用户名>/<用户目录下的路径, 一般以files/开头>
手动迁移组文件夹的方法
因为组文件夹一直是一个插件的概念出现,官方文档上没有专门写出来如何应用这个插件。很遗憾。搜到github有这么一条命令
sudo -u www-data php occ groupfolders:scan 1
最后边的数组就是你用户组的ID号码。注意,当迁移完成后,需要使用以下命令来刷新权限:
chown -R www-data:www-data /mnt/pool/nextcloud/data/__groupfolders/1
Docker无法输入中文的临时解决
因为next cloud官方那个docker没法输入中文。最快的方法是通过宿主命令挂进去,或者发个curl指令来执行。例如, 在宿主机上运行
docker exec nextcloud容器名字或者ID bash -c "sudo -u www-data php -f occ files:scan --path=public/files/我的红白机存档/"
即可解决
另外一种方式就是在当前你的终端下用ls命令把文件列举出来, 再用粘贴复制的方式去解决。如果文件名左右两侧发现有单引号, 不要复制单引号。