我想从ftp-server下载许多文件(大约10000个)。文件名太长。我只想用名字中的日期保存它们。例如:ABCDE201604120000-abcde.nc
我更喜欢20160412.nc
有可能吗?
答案 0 :(得分:0)
我不确定wget
是否提供了类似的功能,但是对于curl
,可以从它提供的相对丰富的syntax中获利,以便指定感兴趣的网址。例如:
curl \
"https://ftp5.gwdg.de/pub/misc/openstreetmap/SOTMEU2014/[53-54].{mp3,mp4}" \
-o "file_#1.#2"
将下载文件53.mp3, 53.mp4, 54.mp3, 54.mp4
。输出文件指定为file_#1.#2
- 此处,#1
由curl
替换,其中序列[53-54]
的值对应于正在下载的文件。同样,#2
会替换为mp3
或mp4
。因此,例如,53.mp3
将保存为file_53.mp3
。
答案 1 :(得分:0)
ewcz's answer如果可以枚举帖子中显示的文件名,则可以正常工作。但是,如果文件名难以枚举,例如,因为整数稀疏填充,此解决方案将导致大量404 Not Found
请求。
如果是这种情况,那么最好以递归方式下载所有文件,如您所示,然后重命名它们。如果文件名遵循固定模式,则可以从原始名称中选择子字符串并将其用作新名称。在给定的示例中,新文件名从位置5开始,长度为8个字符。以下bash命令重命名当前目录中的所有*.nc
个文件。
for f in *.nc; do mv "$f" "${f:5:8}.nc" ; done
如果文件名不遵循修复模式且长度可能不同,则可以使用sed
使用更复杂的模式替换,请参阅SO post作为示例。