`
bnmnba
  • 浏览: 294925 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

linux wget命令下发FTP时,包含中文路径提示文件不存在,无法下载文件解决方法

 
阅读更多

 

文件不存在的原因是因为编码不同,服务器认为请求地址的文件不存在。

解决方法是使用服务可以理解的方式对路径进行编码(我的ftp服务器使用的是gb2312),例如使用java先把中文路径转换为英文再调用wget进行下载:

package c;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

public class FTPGb2312 {

	public static void main(String[] args) {
		BufferedReader read2=null;
		BufferedReader read1=null;
		try {
			System.out.println("[info]:args[0]"+args[0]);
			args[0]=getPath(args[0]);
			System.out.println("[info]:args[0]"+args[0]);
			System.out.println("[info]:args[1]"+args[1]);
			Runtime r = Runtime.getRuntime();
			Process p=r.exec("wget --restrict-file-names=nocontrol ftp://10.231.155.209"+args[0]+" -O "+args[1]);
			read1 = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8"));
			String s=null;
			while((s=read1.readLine())!=null){
				System.out.println("[info]:"+s);
			}
			
			read2 = new BufferedReader(new InputStreamReader(p.getErrorStream(),"UTF-8"));
			
			while((s=read2.readLine())!=null){
				System.out.println("[info]:"+s);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try{
			if(read1!=null){
				read1.close();
			}
			}catch(Exception e){}
			try{
			if(read2!=null){
				read2.close();
			}
			}catch(Exception e){}
		}
		
	}

	private static String getPath(String str) throws UnsupportedEncodingException {
		String[] strs=str.split("/");
		List<String> l=new ArrayList<String>();
		StringBuffer sb=new StringBuffer();
		sb.append("/");
		for (int i = 0; i < strs.length; i++) {
			if(strs[i]!=null&&!strs[i].equals("")){
				l.add(URLEncoder.encode(strs[i], "gb2312"));
			}
		}
		for (String s:l){
			sb.append("/");
			sb.append(s);
		}
		return sb.toString();
	}
}

 使用

java  -jar c.FTPGb2312 ftp路径 目标文件路径

代替 wget  ftp路径 -O 目标文件路径

即可实现正常下载

 

分享到:
评论

相关推荐

    linux命令行下的ftp 多文件下载和目录下载

    使用 Linux 命令行下的 FTP 命令可以实现多文件下载和目录下载,而使用 `wget` 命令可以解决 FTP 命令行不支持目录下载的问题。同时,可以使用 Shell 脚本实现 FTP 多文件下载和上传的自动化任务。

    支持中文目录wget版本,linux版本

    wget下载地址:https://ftp.gnu.org/gnu/wget/ 在wget的源代码中 src/url.c 这个文件中有wget如何处理文件名的函数url_file_name() url_file_name()在根据url的形式判断该保存为什么样的文件名,并进行了多方面的...

    linux 离线安装wget

    在Linux系统中,`wget`是一个非常实用的命令行工具,用于从互联网上下载文件,尤其在没有图形化界面或者网络连接不稳定的情况下,其离线安装就显得尤为重要。本篇文章将详细阐述如何在Linux环境下离线安装`wget`,...

    linux wget 命令用法详解(附实例说明).docx

    Linux wget 命令是 Linux 操作系统中一个功能强大且实用的下载工具,主要用于从网络上下载文件。它支持断点下载、FTP 和 HTTP 下载方式、代理服务器和设置起来方便简单等多种功能。以下是 wget 命令的使用方法和实例...

    wget命令用法

    wget 非常稳定 它在带宽很窄的情况下和不稳定网络中有很强的适应性 如果是由于网络的原因下载失败 wget命令会不断的尝试 直到整个文件下载完毕 如果是服务器打断下载过程 它会再次联到服务器上从停止的地方继续下载 ...

    windows下wget命令

    wget是Linux环境中广泛使用的命令行工具,用于从Web服务器下载文件。尽管它主要与Linux相关,但通过在Windows上安装并配置,用户也可以利用wget的强大功能。本篇文章将详细介绍如何在Windows环境下设置和使用wget...

    wget网络多协议下载

    wget是一款强大的网络下载工具,它被广泛应用于Linux系统中,同时也可跨平台运行在其他Unix-like系统上。wget以其可靠性和自动化特性著称,支持HTTP、HTTPS和FTP三种主要的互联网协议,使得用户能够方便地从Web...

    每天一个linux命令(61):wget命令详解

    `wget`的这些特性使其成为Linux系统中不可或缺的下载工具,无论是单个文件还是整个网站的镜像,甚至是需要断点续传的大文件,`wget`都能高效地完成任务。在处理网络不稳定或带宽有限的环境时,它的稳定性和智能恢复...

    SSH远程管理Linux常用命令文件上传下载.docx

    SSH 远程管理 Linux 常用命令文件上传下载 一、SSH 基础知识 SSH(Secure Shell)是一种安全的远程登录协议,使用加密技术来保护数据的传输。 SSH 客户端软件可以连接到 SSH 服务器,实现远程管理和文件传输。 ...

    windows 使用wget 下载命令

    1. **下载文件**:在命令提示符中,输入`wget64 [URL]`,其中`[URL]`是你想要下载的文件的完整URL地址。例如,如果你要下载一个名为`example.zip`的文件,URL可能是`http://example.com/example.zip`,则命令将是`...

    详解Linux中的wget命令

    wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会...

    Linux基础课件-网络管理命令-wget命令.pptx

    其中,wget命令是一个功能强大的下载工具,它允许用户从互联网上下载文件,包括文本、图片、软件包等各种类型的数据。本教程将深入讲解wget命令的作用、基本格式和用法。 ### wget命令的作用 wget命令的主要功能是...

    wget命令用法详解.docx

    wget 命令是 Linux 下开发的开放源代码软件,由 Hrvoje Niksic 创建,后来被移植到包括 Windows 在内的各个平台上。它有以下功能和特点: 1. 支持断点下传功能:wget 命令可以继续下载已经断点的文件,这对网络不是...

    wget命令报错,使用wget没有反应或者报错

    wget 命令报错解决方案 wget 命令是一种常用的下载工具,它可以从指定的 URL 下载文件到本地。但是在使用 wget 命令时,可能会遇到各种报错,例如无法解析主机或者无反应。本文将对 wget 命令报错的解决方案进行...

    解决wget无法使用的方法

    ### 解决wget无法使用的方法 在Linux环境中,`wget`是一个非常重要的工具,它用于从网络上下载文件。然而,在某些情况下,用户可能会遇到`wget`无法使用的问题。本文将详细探讨这一问题,并提供一系列解决方案。 #...

    linux常用命令大全.pdf

    3. **wget/curl**:从互联网上下载文件。 4. **ssh**:用于安全地登录远程计算机。 5. **scp**:安全地在本地和远程之间复制文件。 #### 四、系统管理 1. **df/du**:查看磁盘空间使用情况。 2. **mount/umount...

    windows版wget命令

    windows版wget命令 使用帮助wget --help Startup: -V, --version display the version of Wget and exit. -b, --background go to background after startup. -e, --execute=COMMAND execute a `.wgetrc' ...

    使用wget命令从清华源下载anaconda的安装脚本,结果返回403错误,无法下载。_-wget-403.zip

    使用wget命令从清华源下载anaconda的安装脚本,结果返回403错误,无法下载。_-wget-403

    离线安装wget依赖包

    在Linux系统中,尤其是服务器环境,我们经常遇到网络不稳定或者没有网络的情况,此时需要离线安装软件就显得尤为重要。本文将详细介绍如何在CentOS虚拟机上离线安装wget及其依赖包。 首先,让我们理解一下wget的...

Global site tag (gtag.js) - Google Analytics