首页 > 系统相关 >(转)Linux下使用Shell脚本实现FTP自动上传和下载文件

(转)Linux下使用Shell脚本实现FTP自动上传和下载文件

时间:2022-12-10 19:33:43浏览次数:47  
标签:FTP Shell ftphome ftp 文件传输 文件 Linux local

原文:https://blog.csdn.net/qq_34718338/article/details/123701278

登录FTP实现下载文件功能
FTP服务器:192.168.0.199
FTP路径:/ftphome/data
本地路径:/local/data
将文件从FTP下载到本地的脚本如下:

批量下载脚本代码
1 #从FTP上批量下载文件到本地
2 #!/bin/sh
3 ftp -v -n 192.168.0.199<<EOF
4 user ftpuser ftppwd
5 binary
6 cd /ftphome/downloadData
7 lcd /local/getDownloadData
8 prompt
9 mget *
10 bye
11 EOF
12 echo "download from ftp successfully"
1
2
3
4
5
6
7
8
9
10
11
12
下载单个文件脚本代码
1 #从FTP上下载单文件到本地
2 #!/bin/sh
3 ftp -v -n 192.168.0.199<<EOF
4 user ftpuser ftppwd
5 binary
6 cd /ftphome/downloadData
7 lcd /local/getDownLoadData
8 prompt
9 #get test.txt
10 get test.txt
11 bye
12 EOF
13 echo "download from ftp successfully"
1
2
3
4
5
6
7
8
9
10
11
12
13
登录FTP实现上传文件功能
FTP服务器:192.168.0.199
FTP路径:/ftphome/uploadData
本地路径:/local/getUploadData
将文件从本地传到FTP的脚本如下:

批量上传脚本代码
1 #从本地向FTP批量上传文档
2 #!/bin/sh
3 ftp -v -n 192.168.0.199<<EOF
4 user ftpuser ftppwd
5 binary
6 hash
7 cd /ftphome/uploadData
8 lcd /ftphome/getUploadData
9 prompt
10 mput *
11 bye
12 #here document
13 EOF
14 echo "commit to ftp successfully"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
上传单个文件脚本代码
1 #从本地向FTP上传单个文档
2 #!/bin/sh
3 PUTFILE = test.txt
4
5 ftp -v -n 192.168.0.199<<EOF
6 user ftpuser ftppwd
7 binary
8 cd /ftphome/uploadData
9 lcd /ftphome/getUploadData
10 prompt
11 put $PUTFILE
12 bye
13 #here document
14 EOF
15 echo "commit to ftp successfully"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
命令解释
登录FTP
1 ftp -i -n 192.168.0.199 << EOF

<< 是使用即时文件重定向输入
EOF是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。
ftp常见的几个标志有:

-d:使用调试模式,但必须编辑 /etc/syslog.conf 文件并添加以下中的一项:user.info FileName 或 user.debug FileName。
-g:禁用文件名中的元字符拓展,即取消全局文件名。
-i :关闭多文件传输中的交互式提示。
-n:防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。
-v:显示远程服务器的全部响应,并提供数据传输的统计信息,即在程序运行时显示详细的处理信息。
输入FTP用户名和密码
1 user ftpuser ftppwd
ftpuser:登录FTP时的用户名
ftppwd:登录FTP时的密码

通过binary命令传输文件
1 binary
FTP文件传输类型有: ascii、binary、ebcdic、image、local M 和 tenex。

– ascii:将文件传输类型设置为网络 ASCII。此类型为缺省值,即默认使用ascii方式进行传输。
– binary:将文件传输类型设置为二进制映像。需要使用binary方式传输的文件类型有ISO文件、可执行文件、压缩文件、图片等。此类型可能比 ASCII 传送更有效。
– ebcdic:将文件传输类型设为 EBCDIC。
– image:将文件传输类型设置为二进制映像。此类型可能比 ASCII 传送更有效。
– local M:将文件传输类型设置为本地。M 参数定义每计算机字位的十进制数。此参数没有缺省值。
– tenex:将文件传输类型设为 TENEX 机器需要的类型。
1
2
3
4
5
6
切换散列符号 (#) 打印
1 hash
当用get或put命令传送一个数据块时,让FTP显示一个#,这是看得见的确定数据在传输的信号,在用户不确信网络是否工作时有用。当传输很大的文件时,如果FTP已显示这种信息,表示传输正在进行。hash命令是一个布尔变量式的命令,用hash命令打开显示#开关,再用hash命令关闭显示。

切换目录
分别在本地和FTP上进入对应文件夹下:
到FTP上对应路径(这里表示进入/ftphome/downloadData的文件夹下):

1 cd /ftphome/downloadData
到本地的对应路径(这里表示在/ftphome/getDownloadData的文件夹下):

lcd /ftphome/getDownloadData
切换交互式提示
prompt
使用mget或mput时,prompt命令让FTP在传输每个文件前进行提示,这样防止覆盖已有的文件。若发出prompt命令时已经启动了提示,FTP将把提示关掉,此时再传输所有的文件则不会有任何提问。

文件传输
下载文件
下载多个文件:
格式:mget [remote-files]
例如:获取远端所在文件夹下所有文件

1 mget *
2 #或
3 mget .

注:mget . 每下载一个文件,都会有提示。如果要除掉提示,则在mget . 命令前先执行:prompt off。

下载单个文件:
格式:get [remote-file] [local-file]
例如:获取远端FTP上的text.txt文件

1 get a.txt
上传文件
上传多个文件:
格式:mput local-files
例如:将所在文件夹下所有文件上传到FTP上

mput *

上传单个文件:
格式:put local-file [remote-file]
例如:将本地text.txt文件上传到远端FTP上

1 put a.txt
断开连接
1 bye
结束文件传输会话并退出 ftp 命令,与quit命令相同。

分界符标志
1 … << EOF
2 #execute shell
3 EOF
EOF只是一个分界符标志,完全可以用abc, ! 等替换,也一样的功能,只是大家都习惯用EOF来表示。
<<用法:当shell看到<<的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。因此分界符可以是定义的任何字符串。

解决:ftp命令行不支持目录下载
通过wget得到解决
#wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r
注:
星号*必须有,否则下载下来的就一个文件index.html
-r参数就是用来目录下载的
————————————————
版权声明:本文为CSDN博主「哇小侠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34718338/article/details/123701278

标签:FTP,Shell,ftphome,ftp,文件传输,文件,Linux,local
From: https://www.cnblogs.com/liujiacai/p/16972155.html

相关文章

  • 【备忘录】龙蜥anolis系统+deepin桌面(DDE),配置edge浏览器、无线网卡、AMD声卡、网易云
    写在前头:因为我的电脑用的AMDCPU和AMD显卡,声音是显卡的HDMI传输到带喇叭显示器上的,所以必须用可以安装AMD驱动的内核系统(RHCK),目前ANCK内核不能安装AMD驱动。1.配置桌面......
  • (转)shell命令:find查找命令
    原文:https://blog.csdn.net/xuejianbest/article/details/84988196?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-84......
  • xshell批量登录交换机执行命令
    参考:​​https://www.jianshu.com/p/3aada3708970​​​​https://blog.csdn.net/qq_42427912/article/details/112909860?spm=1001.2101.3001.6650.1&utm_medium=distribut......
  • Linux命令行下删除文件内容
    我们介绍的例子会修改原始文件,所以如果大家在平时使用或者练习的时候,最好先做好备份。我们大家都知道,在vim中删除文件中的某几行很简单,只需要按下dd键即可。那么,在不主......
  • Linux命令之vmstat
    一、使用说明vmstat可以对操作系统的内存信息、进程状态、CPU活动、磁盘等信息进行监控,不足之处是无法对某个进程进行深入分析。二、用法及参数说明-a:显示活跃和非......
  • Linux监控命令之top
    一、命令说明top命令能够实时监控系统的运行状态,并且可以按照CPU、内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查看即时活跃......
  • Linux监控命令之iostat
    一、使用说明iostat是对系统的磁盘I/O操作进行监控,它的输出主要显示磁盘读写操作的统计信息,同时给出CPU的使用情况。同vmstat一样,iostat不能对某个进程进行深入分析,......
  • Linux监控命令之sar
    一、使用说明sar是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使......
  • Linux监控命令之lsof
    一、命令说明lsof命令的原始功能是列出打开的文件的进程,但LINUX下,所有的设备都是以文件的行式存在的,所以,lsof的功能很强大。二、参数说明-a:列出打开文件存在的进......
  • [ Linux ] 进程信号递达,阻塞,捕捉
    1.coredump字段coredump在进程控制中进程等待部分,我们遗留了一个coredump字段,在waitpid中有一个status参数,该参数是一个输出型参数,其中status不能简单的当做整形来看待,我......