卷曲通配符删除

时间:2017-11-30 16:26:29

标签: bash curl

我正在尝试使用curl删除文件,然后再上传新的一组,我在尝试通配符文件时遇到了麻烦。

以下代码用于删除一个特定文件

curl -v -u usr:"pass" ftp://11.11.11.11/outgoing/ -Q "DELE /outgoing/configuration-1.zip"

但是当我尝试使用以下

通配文件时
curl -v -u usr:"pass" ftp://11.11.11.11/outgoing/ -Q "DELE /outgoing/configuration-*.zip"

我在下面的错误

errorconfiguration-*: No such file or directory
 QUOT command failed with 550

我可以在curl delete中使用通配符吗?

由于

1 个答案:

答案 0 :(得分:1)

Curl在FTP服务器上的任何命令中都不支持通配符。为了执行所需的删除,您必须首先列出服务器上目录中的文件,过滤到您想要的文件,然后为这些文件发出删除命令。

假设您的文件位于ftp://11.11.11.11/outgoing路径中,您可以执行以下操作:

curl -u usr:"pass" -l ftp://11.11.11.11/outgoing \
| grep '^configuration[-][[:digit:]]\+[.]zip$' \
| xargs -I{} -- curl -v -u usr:"pass" ftp://11.11.11.11/outgoing -Q "DELE {}"

该命令(未经测试,因为我无法访问您的服务器)执行以下操作:

  1. 输出服务器上outgoing/outgoing目录的目录列表。
  2. 过滤以configuration-开头的文件名的目录列表,然后有一个或多个数字,然后以.zip结尾。您可能需要针对不同的模式调整此正则表达式。
  3. 将匹配的名称提供给xargs,使用分隔符{}插入每个匹配的名称,将curl命令运行到DELETE服务器上的每个文件。
  4. 您可以使用一个curl命令通过将匹配的名称连接到一个删除命令中来删除所有文件,但这样做不太清晰,可以用作示例。