wget 排除文件名列表

wget exclude list of filenames

我需要使用 wget 从 ftp 服务器获取数据。我需要它从一个目录中获取除文件名列表之外的所有文件。因此,例如:

fetchDir="ftp://user:pass@host/path/to/FileName*.csv.gz"
excludeList="FileName314.csv.gz, FileName271.csv.gz, FileName161.csv.gz"

wget ${fetchDir} --reject ${excludeList} -nc

然而,这给了我一个看起来像这样的错误:

...
Rejecting ‘FileName000.csv.gz’.
Rejecting ‘FileName001.csv.gz’.
No matches on pattern ‘FileName*.csv.gz’.
--2015-12-08 14:27:28--  http://filename314.csv.gz/
Resolving filename314.csv.gz (filename314.csv.gz)... failed: Name or service not known.
wget: unable to resolve host address ‘filename314.csv.gz’

如何更改我的代码以使其接受我的拒绝?

--reject 选项需要一个以逗号分隔的列表。但是,您的 excludeList 变量包含空格和逗号。解释命令时,shell 执行 word splitting 扩展 shell 变量之后。

这导致只有第一个文件名模式被视为 --reject 选项的参数;其余列表成员将被解析为额外的 URL。变量赋值应该改为:

excludeList="FileName314.csv.gz,FileName271.csv.gz,FileName161.csv.gz"

注意:实际上不需要双引号,因为字符串中没有特殊字符。