Bash 卷曲通配符删除
我试图在上传新文件集之前使用curl删除文件,但在尝试对文件进行通配符时遇到问题 下面的代码用于删除一个特定文件Bash 卷曲通配符删除,bash,curl,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/configurati
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中使用通配符吗
谢谢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 {}"
该命令(未经测试,因为我无权访问您的服务器)执行以下操作:
传出/传出
目录的目录列表configuration-
开头,然后有一个或多个数字,然后以.zip
结尾的文件名。您可能需要针对不同的模式调整此正则表达式xargs
,后者使用分隔符{}
插入每个匹配的名称,运行curl
命令以删除服务器上的每个文件
您可以使用一个
curl
命令删除所有文件,方法是将匹配的名称合并到一个delete命令中,但作为一个示例,该命令不太清晰。FTP中没有通配符。任何通配符支持都必须在客户端中完成,即希望支持通配符的客户端应获得目录列表,选择匹配的名称,并分别对每个名称执行命令。Curl没有这样做。这看起来很好,我只需要找出文件实际名称的正则表达式,例如test-test-test-7.17.1-1.117.zip(每个文件的数字会有所不同祝你好运!毫不犹豫地将grep放入“PCRE”模式(比我在示例中使用的BRE模式灵活得多)使用-P
开关,如果您的grep支持它,或者直接将perl regex与ack
或perl
:…一起使用,并且如果您不关心数字内容(例如,任何test-11.22.-333.44-4..5--5.6.-10.zip
-type字符串),您可以使用类似^test[:digital.-]zip$
,但如果您真的需要健壮性,这可能有点混乱。这不是真的。