提问人:Tom Dilling 提问时间:8/23/2023 最后编辑:Tom Dilling 更新时间:8/23/2023 访问量:14
RCurl:遍历远程目录,然后删除文件
RCurl: Traverse Remote Directory and Then Delete File
问:
我正在将 RCurl 用于一个项目。我需要从远程服务器上的特定目录中删除文件。简而言之,我的问题是我可以成功登录,然后遍历到有问题的目录。但句柄不会保留该位置。因此,当我下次设置第二个命令来删除文件时,它找不到它(因为我在错误的目录中)。当我登录时,它(自然地)将我带到我的主目录。
我认为可行的是:
- 创建句柄
- curlPerform 到“CWD”到目录(这有效!
- 再执行一次 curlPerform 以删除文件。但是,该目录不会保留
在两个 curlPerform 命令之间。
h <- RCurl::getCurlHandle()
在下面,“unpwd”是用户名:pwd 对:
RCurl::curlSetOpt(.opts = list(verbose = TRUE,
userpwd = unpwd),
curl = h)
在下面的代码中,“x”是一个字符串变量。 URL 列出了根目录(当我尝试进一步指定我的 homedir 在那里,它爆炸了。当我省略主目录时,它会自动将我放在那里,所以 目录遍历有效。这花了很多时间才弄清楚!
RCurl::curlPerform(
url = "ftp://<URL>",
curl = h,
quote = paste0("CWD ChangeTo/", x, "/ThisDirectory/")
)
我很高兴来到这里。它成功列出文件。所以现在我尝试 以下代码。“filenames”是包含在 该目录(在前面的代码中成功获取):
RCurl::curlPerform(url = paste0("<URL>/ChangeTo/", x, "/ThisDirectory/"),
curl = h,
quote = paste0("DELE ", filenames[1]))
但是这里它给出了一个 550 错误:我再次在我的主目录中,所以 在那里找不到该文件。我在服务器上的“位置”没有保留。
curl 教程(URL:https://curl.se/docs/manual.html)声明如下: 这可能解释了这个问题。在讨论多次下载时,它指出(在 参考下载): 请注意,curl 不能对后续 curl 中使用的传输使用持久连接 调用。尝试在同一命令行上填充尽可能多的 URL(如果它们使用 同一主机,因为这将使传输速度更快。如果对文件使用 HTTP 代理 转移,几乎所有转移都将是持久的。
如果我尝试以下操作,我不会cwd进入正确的目录, 要么(再次,卡在我的主目录中):
RCurl::curlPerform(
url = paste0("<URL>/~/ChangeTo/", x, "/ThisDirectory/"),
curl = h,
quote = paste0("DELE ", filenames[1])
)
因此,我需要先“cwd”,然后以某种方式保留该位置(它未嵌入在句柄中),然后删除该文件。
最坏的情况是,我猜最后可以使用 FileZilla 手动删除文件。但据我所知,远程服务器上没有代理服务器,我也无法安装。
任何和所有的想法都非常感谢。谢谢!!!!
答: 暂无答案
下一个:使用 httr 提取二进制附件
评论