下班前领导忽然要求我将客户的日志服务器上一些日志拷贝到测试服务器中,不过领导只提供给我FTP的连接方式,很明显就是要我用FTP方式去做啦

一般来说FTP批量下载也就上网随便找个脚本的事,但是却成了我疯狂踩坑的开始

1、mget命令完全不能用

首先,为了保证命令是可以正常执行的,我们先连接FTP服务器,并跳转到某个文件夹下,执行以下命令:

mget *

一般来说,这时候弹出下载提示只需要回车即可下载,然而我这次却深深的感觉到了这个命令的恶意

 mget -rwxr-xr-x 1 user group         154519 Jan 02 07:30 20190101180001.txt?
227 Entering Passive Mode(192,168,24,158,7,170).
550 "/log/2019/01/-rwxr-xr-x 1 user group 154519 Jan 02 07:30 20190101180001.txt": Directory not found.

excuse me?

为什么你的文件路径会在文件名前出现文件属性???

我就不信邪了,既然都是txt格式保存的日志那我就只取.txt的,我就不信还有问题

ftp> mget *.txt
"/log/2019/01/*.txt": Directory not found.

卧槽,别这么打脸好吧!难道是FTP服务器挂了?于是用get命令试了一下,然而...

ftp> get 20190131160001.txt
local: 20190131160001.txt remote: 20190131160001.txt
227 Entering Passive Mode(192,168,24,158,18,227).
150 Opening BINARY mode data connection for file transfer.
226 Transfer complete.
1540 bytes received in 2.39 secs (0.65 Kbytes/sec)

很明显,FTP服务器没有任何问题,get命令可以执行,mget出错是什么鬼

行行行,你赢了,mget不行我换个方式可以了吧。

2.wget下载失败

既然mget有问题,那我们就换一个方法,但是curl不支持递归下载,那我们就选择常见的wget来吧

[root@localhost ~]# wget ftp://user:PASSWORD@192.168.24.158/log/2019/02/20190201180001.txt
--2019-02-27 15:37:42-- ftp://user:*password*@192.168.24.158/log/2019/02/20190201180001.txt
Connecting to 192.168.1.1:8080... connected.
Proxy request sent, awaiting response...

看起来好像没问题了,响应可能需要一点时间吧,等等就好了(于是等到了地老天荒)

还等啥啊!局域网响应哪有这么久的!

3.虚拟机执行以上命令,找到原因

以上两个常用方法都失败了,那会不会是网络问题呢?于是我到我自己的虚拟机上执行这这几条命令,结果mget得到的结果是一样的,但wget却可以成功下载。

那么问题就很明显了,mget获取文件名的时候,十有八九是FTP服务器将文件属性和文件名合并成一个字符串发送到客户端,所以会出现前面的问题,要是有哪个大佬知道这个问题的原因或者解决方法的话麻烦留个言。

那么wegt失败的原因是什么呢?

仔细观察响应信息之后,我才忽然注意到怎么wget的时候把192.168.1.1作为代理服务器了,让我一度以为是被网关给拦截了,于是加上了参数--no-proxy

wget -r -nH --proxy=none ftp://user:PASSWORD@192.168.24.158/log/2019/02/* 

哇,终于下载成功了,是哪个混蛋设置了默认代理,还代理到网关去了!

记一次FTP下载踩坑的故(shi)事(gu)的更多相关文章

  1. 记一次kubernetes驱逐踩坑

    最近在公司的线上服务器上发现了一个现象: 将某个node的kubelet短暂的停掉之后,其上的pod马上会被驱逐,这让笔者大吃一惊,印象之中,停掉kubelet后,该node会变为NotReady状态 ...

  2. 记一次pm2的踩坑

    1.问题: 公司采用了自动发布平台,最近突然发现一个问题,上线完成后服务是能正常访问的,但是有一个节点访问的时候每两次中总是有一次404,通过nginx的access日志分析发现第一次正常访问有一次g ...

  3. 记一次ftp服务器搭建走过的坑

    记一次ftp服务器搭建走过的坑 1.安装 ①下载 wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz #要FQ ②解压 ta ...

  4. windows container 踩坑记

    windows container 踩坑记 Intro 我们有一些服务是 dotnet framework 的,不能直接跑在 docker linux container 下面,最近一直在折腾把它部署 ...

  5. 十年老苹果(A1286)强升Catalina及Win10踩坑记(续)

    背景 自上次发布十年老苹果(A1286)强升Catalina及Win10踩坑记以来,因为后半部分-----系统安装上的细节描述过于简略,一些朋友在安装过程中总是又遇到坑,由此特意详述这一过程,让园友少 ...

  6. WinUI 3 踩坑记:从创建项目到发布

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准. 创建项目 现在 WinUI 3 的入门体验比刚 ...

  7. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  8. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  9. 记jQuery.fn.show的一次踩坑和问题排查

    最近很少已经很少用jQuery,因为主攻移动端,常用Zepto,其实很多细节和jQuery并不一样.最近又无意中接触到了PC的需求和IE6, 使用了jQuery,刚好踩坑了,特意记录一下. 本文内容如 ...

随机推荐

  1. POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】

    Optimal Milking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Sub ...

  2. Win2D 官方文章系列翻译 - 与 Direct2D 互操作

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向 ...

  3. Vue之组件间传值

    标签: Vue Vue之父子组件传值 父向子传递通过props 子向父传递通过$emit 演示地址 代码示例如下: <!DOCTYPE html> <html lang=" ...

  4. 基于 MUI 构建一个具有 90 +页面的APP应用

    前言 mui是一款接近原生App体验的前端框架,只需要掌握前端技术就可以开发APP应用,官方有提供功能比较全面的demo版本, 但在实战中总会遇到一些不可避免但坑,对于没有接触过mui的开发者,难免会 ...

  5. SASS简介及使用方法

    一.什么是Sass Sass (Syntactically Awesome StyleSheets)是css的一个扩展开发工具,它允许你使用变量.条件语句等,使开发更简单可维护.这里是官方文档. 二. ...

  6. 《Cron表达式详解》

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...

  7. Android AS升级3.1 编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.

    AndroidStudio升级到3.1后编译报错:The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plug ...

  8. ArcGIS API for JavaScript开发初探——基本地图组件使用

    1.前言 在上一篇我们已经我们已经讲述了第一个地图应用程序的HelloMap的创建过程,这一篇我们来讲述基本地图组件:Home Button.比例尺.鹰眼图的使用方法. 2.基本地图组件 在ArcGI ...

  9. u-boot分析(二)----工作流程分析

    u-boot分析(二) 由于这两天家里有点事,所以耽误了点时间,没有按时更新,今天我首先要跟大家说说我对于u-boot分析的整体的思路,然后呢我以后的博客会按照这个内容更新,希望大家关注. 言归正传, ...

  10. python 修改xml文件

    在百度知道里面有人问了这么一个问题: 有一个xml文件:<root>text <a/> <a/> ...这里省略n个<a/> <root>想 ...