RCurl:遍历远程目录,然后删除文件

RCurl: Traverse Remote Directory and Then Delete File

提问人:Tom Dilling 提问时间:8/23/2023 最后编辑:Tom Dilling 更新时间:8/23/2023 访问量:14

问:

我正在将 RCurl 用于一个项目。我需要从远程服务器上的特定目录中删除文件。简而言之,我的问题是我可以成功登录,然后遍历到有问题的目录。但句柄不会保留该位置。因此,当我下次设置第二个命令来删除文件时,它找不到它(因为我在错误的目录中)。当我登录时,它(自然地)将我带到我的主目录。

我认为可行的是:

  1. 创建句柄
  2. curlPerform 到“CWD”到目录(这有效!
  3. 再执行一次 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 手动删除文件。但据我所知,远程服务器上没有代理服务器,我也无法安装。

任何和所有的想法都非常感谢。谢谢!!!!

rcurl

评论


答: 暂无答案