首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在curl或WebDav中递归创建目录?

问如何在curl或WebDav中递归创建目录?
EN

Stack Overflow用户
提问于 2017-03-22 09:31:49
回答 2查看 6.1K关注 0票数 0

我想将文件上传到我的nextcloud服务器。问题是我得到了一个错误。第一个curl命令应该会创建目录。

代码语言:javascript
复制
curl -u "$USER":"$PW" -X MKCOL "https://MYSERVER/remote.php/dav/files/$USER/$MANY_DIRECTORIES"
curl -u "$USER":"$PW" -T "$FILE" "https://MYSERVER/remote.php/dav/files/$USER/$MANY_DIRECTORIES/$FILE"

如果$MANY_DIRECTORIES只包含一个目录,它就可以工作。但是如果这个变量包含/root/deep/deeper,而deep不存在,我会得到这样的错误:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>Sabre\DAV\Exception\Conflict</s:exception>
  <s:message>Parent node does not exist</s:message>
</d:error>

第二个命令抛出这个错误:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>Sabre\DAV\Exception\NotFound</s:exception>
  <s:message>File with name //test could not be located</s:message>
</d:error>

那么我如何创建递归的目录来上传文件呢?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 23:39:40

没有创建递归目录的选项,所以我将变量拆分为一个数组,并逐个创建目录。

代码语言:javascript
复制
IFS='/' read -r -a array <<<"$2"
for el in "${array[@]}"
do
        TEMP=$TEMP/$el
        curl -u "$USER:$PW" \
        -X MKCOL \
        "https://MYSERVER/remote.php/dav/files/$USER$TEMP"
done

curl -u "$USER:$PW" \
         -T "$1" "https://MYSERVER/remote.php/dav/files/$USER/$2/$1"
票数 4
EN

Stack Overflow用户

发布于 2020-10-07 18:15:11

对于这种行为是没有办法的!

方法:

您需要创建自己的递归函数,该函数遍历目录路径并逐个创建它们,就像上面answer中的cy221一样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42941176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档