我经常使用 wget 从 sourceforge.net 下载 tarball。
下载的文件然后被命名,例如 SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch
当我尝试
tar xzf SQliteManager-1.2.4.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F\&ts\=1305711521\&use_mirror\=switch
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
tar (child): Cannot connect to SQliteManager-1.2.4.tar.gz?r=http: resolve failed
gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
将文件重命名为foo.tar.gz
提取工作完美后。
有没有办法让我不必在每次提取目标文件之前都被迫重命名?
cam*_*amh 62
您看到的错误原因可以在GNU tar 文档中找到:
如果存档文件名包含冒号 (':'),则假定它是另一台机器上的文件[...]
也就是说,它将解释SQliteManager-1.2.4.tar.gz?r=http
为主机名并尝试将其解析为 IP 地址,因此会出现“解析失败”错误。
同样的文档继续说:
如果您需要使用名称中包含冒号的文件,则可以使用“--force-local”选项来禁止远程磁带驱动器行为。
使用 下载时wget
,请使用-O
选项指定输出文件名。
wget "http://domain.com/file.tgz?crazy=args&stuff=todelete" -O file.tgz
Run Code Online (Sandbox Code Playgroud)
这将导致文件以给定的文件名保存,并为您省去麻烦或重命名它。不,您不是唯一希望 sourcefourge 不会愚蠢到传递带有 url 参数的文件的人。