cnbeining / onedrivecmd

A command line client for Onedrive.
https://www.cnbeining.com/
GNU Affero General Public License v3.0
378 stars 78 forks source link

能否直接上传目录? #24

Closed OHLIA closed 5 years ago

OHLIA commented 6 years ago

onedrivecmd [OPTIONS] put /tmp/hello.txt od:/bar/ 上传

这条命令能否直接改为

onedrivecmd [OPTIONS] put /tmp/ od:/bar/

来上传tmp目录全部文件?

cnbeining commented 6 years ago

TODO。

在 2018年4月11日,上午1:31,OHLIA notifications@github.com 写道:

onedrivecmd [OPTIONS] put /tmp/hello.txt od:/bar/ 上传

这条命令能否直接改为

onedrivecmd [OPTIONS] put /tmp/ od:/bar/

来上传tmp目录全部文件?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/cnbeining/onedrivecmd/issues/24, or mute the thread https://github.com/notifications/unsubscribe-auth/ABfRgqpCQiDxW2NBTFxIItX-cm1BWKOsks5tnZUvgaJpZM4TPZXT.

OHLIA commented 6 years ago

还有个问题, 传输文件到onedrive时候,VPS 1G 内存被吃满是怎么回事? 不过幸亏文件还能继续传送完毕。(在用RCLONE时候吃满内存就会被killed,导致传送失败还不能断点续传。)

cnbeining commented 6 years ago

因为onedrivecmd其实是写给服务器用的 我默认服务器的口子不会小于百兆 千兆共享也是有可能的 所以默认的chunk设了个极大的数字。(相比直接 隔壁的gdrive设的就很保守。)

巨大的chunk会吃掉极大的内存 因为我的目的是尽可能用光上传带宽 考虑到绝大多数情况下上传带宽是共享的 那么我需要特别aggressive的设置才能抢得过其他小鸡。

当然了 核心问题是:我写code从不管内存 如果我管内存 那我就换语言了是不是。。。

(也有可能是requests的性能问题 这个我就不好debug了。)

在 2018年4月11日,上午2:42,OHLIA notifications@github.com 写道:

还有个问题, 传输文件到onedrive时候,VPS 1G 内存被吃满是怎么回事? 不过幸亏文件还能继续传送完毕。(在用RCLONE时候吃满内存就会被killed,导致传送失败还不能断点续传。)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cnbeining/onedrivecmd/issues/24#issuecomment-380344590, or mute the thread https://github.com/notifications/unsubscribe-auth/ABfRgqukn6lwwzomOaHjcTrb9K34YOvIks5tnaXMgaJpZM4TPZXT.

OHLIA commented 6 years ago

我提个想法, 上传目录的功能:文件夹多个文件排成队列,单个文件传完接着传队列的下一个文件的方法可否实现?

cnbeining commented 6 years ago

计划很好

有种问题叫作者懒得写(

在 2018年4月11日,下午11:38,OHLIA notifications@github.com 写道:

我提个想法, 上传目录的功能:文件夹多个文件排成队列,单个文件传完接着传队列的下一个文件的方法可否实现?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/cnbeining/onedrivecmd/issues/24#issuecomment-380667971, or mute the thread https://github.com/notifications/unsubscribe-auth/ABfRgikPOKzaepn6OcKtCrxeXtKJHx3kks5tnswigaJpZM4TPZXT.

OHLIA commented 6 years ago

这几天传文件发现大于10G单文件会上传失败,不知道其他人有没有遇到过。 会不会是onedrive的限制?

cnbeining commented 6 years ago

还真是。

SharePoint(别问我 我真的不知道为什么MS要把Onedrive变得这么复杂)的最大文件限制是10G,但是好像变成15G了。

考虑到MS的文档比党章还不可信,这东西还是自己试验比较好。

Google:单文件5TB看着你

die-Deutsche-Orthopaedie commented 6 years ago

我最后拿shell写了个递归脚本来解决文件夹上传的问题,代码如下:

function rupload(){ # localdir, remotedir
    if [ -d "$1" ]
    then
        local flag=0 # fock mein arse
        for file in `ls "$1" | sed 's/ /|/g'`
        do
            file=`echo "$file" | sed 's/|/ /g'`
            if [ -d "$1/$file" ]
            then
                file2=`echo "$file" | sed 's/ /./g'`
                echo "onedrivecmd mkdir \"$2/$file2\""
                # onedrivecmd mkdir "$2/$file2"
                rupload "$1/$file" "$2/$file2"
            else
                # file=`echo "$file" | sed 's/|/ /g'`
                # echo "onedrivecmd put \"$1/$file\" \"$2\""
                # onedrivecmd put "$1/$file" "$2"
                if [ $flag == 0 ]
                then
                    echo "onedrivecmd put \"$1/\"*.* \"$2\""
                    # onedrivecmd put "$1/"*.* "$2"
                    flag=1
                fi
            fi
        done
    fi
}

localdir="$1"
remotedir="$2"
rupload "$localdir" "$remotedir"

这玩意既可以用深度优先(递归)也可以用广度优先(队列),只要确保在上传文件之前相应的文件夹在onedrive上建好既可。那当然是递归最好用了(手动滑稽 如果不需要目标文件夹没有空格(oneindex的一个bug,如果目标文件夹有空格的话会阻碍缓存重建)的话注释file2一行并将下面的file2换成file

DictXiong commented 5 years ago

谢谢, 功能已添加, 使用 dfs 实现. 实践表明并不需要提前 mkdir, 上传的时候会自动创建.

参见: #41