如何使用wget部分重命名下载的文件?

时间:2018-01-17 20:07:46

标签: wget file-rename

我想从ftp-server下载许多文件(大约10000个)。文件名太长。我只想用名字中的日期保存它们。例如:ABCDE201604120000-abcde.nc我更喜欢20160412.nc 有可能吗?

2 个答案:

答案 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 - 此处,#1curl替换,其中序列[53-54]的值对应于正在下载的文件。同样,#2会替换为mp3mp4。因此,例如,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作为示例。