Linux利用ftp命令上传下载文件
Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹。虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器、SSH、远程会话中掌握命令行ftp的使用还是很有必要的。
ftp命令
使用格式:ftp [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [computer]
-v:禁止显示远程服务器响应信息
-n:禁止自动登录
-i:多文件传输过程中关闭交互提示
-d:启用调试,显示所有客户端与服务器端传递的命令
-g:禁用文件名通配符,允许在本地文件和路径名中使用
实例:ftp 122.122.122.122 2222
输入用户名、密码,即可完成登录。
目录操作
FTP命令可以列出、移动、创建文件夹。
- ls -- 打印目录列表
- !ls -- 查看本地目录
- cd -- 改变目录
- mkdir -- 创建文件夹
使用FTP下载文件
在下载一个文件之前,首先需要使用lcd命令设定本地接收目录位置。
- lcd -- 指定下载目录
- get file.txt [file_new.txt] -- 下载文件 支持更改名字
- mget *.txt -- 使用mget + 通配符下载多个文件
使用FTP上传文件
- lcd -- 指定即将上传的文件,所在的本地目录。
- put file.txt [file_new.txt] -- 上传文件 支持更改名字
- put /home/data/cwh/file.txt -- 绝对路径
- mput *.txt -- 上传多个文件
关闭FTP连接
完成FTP工作后,为了安全起见需要关闭连接。有3个命令可以关闭连接:
- bye -- 关闭连接
- exit -- 关闭连接
- quit -- 关闭连接
- close -- 关闭连接
其他命令
- ? -- 查询ftp命令
- help -- 查询ftp命令
- open [ftp server name] -- 和指定的远程Linux FTP服务器连接
- user [user name] [password] -- 使用指定远程Linux FTP服务器的用户登录
- pwd -- 显示当前路径
- ls -- 列出目录和文件
- dir -- 列出目录和文件(同上)
- mkdir [foldname] -- 创建指定目录
- rmdir [foldname] -- 删除指定目录
- cd -- 切换目录
- delete [filename] -- 删除文件
- rename [filename] [newfilename] -- 重命名
- close -- 关闭连接 但保留FTP命令参数提示
- disconnect -- 关闭连接 但保留FTP命令参数提示(同上)
- bye -- 结束连接
- quit -- 结束连接
- ! -- 直接从远程Linux FTP进入到本地Shell中
- exit -- (接上步)从本地Shell环境返回远程Linux FTP中
- !ls -- 列出本地机器目录和文件
- lcd [foldname] -- 更改本地工作目录
- binary -- 使用二进制传输文件
- prompt -- 切换提示(使用mput或mget上传下载多个文件时避免提示)
- case -- 在使用mget时,将远程主机文件名的大写转换为小写字母
- cdup -- 进入远程主机目录的父目录
- system -- 显示远程主机的操作系统类型
- hash -- 每传输1024字节,显示一个hash符号(#)
- status -- 显示当前ftp状态
一个完整的shell脚本
文件上传脚本
#!/bin/bash #by anding 20200620 #for upload UBF function putftp { Pass='xxxxxxxxxxx' ftp -n 10.254.104.23 21 <<! user mcb3tran $Pass bin
#对端目录 cd /opt/cbbs/pcs/all/data/outgoing put $1 bye ! } # 日志定义 log_date="$(date +'%Y%m%d')" log_dir="$HOME/log/$log_date/upload" log_file="$log_dir/put_%s_${log_date}.log" date1=`date +%Y%m` month1=`date -d "2 month ago" +%Y%m` file="SM"$month1"000.931" #生成文件,调用606接口生成文件 tpssreceive -i 606 sleep 20 #处理文件目录--本地 cd /jsyy/tpss/jt_upload/SM_temp file1=`ls /jsyy/tpss/jt_upload/SM_temp/*$date1*` sed -i s/$date1/$month1/g $file1 cat $file1>$file #文件校验 count1=`diff $file1 $file |wc -l` if [ $count1 -gt 0 ]; then echo "====================文件复制出错,请检查!!!!=====================" else echo "===================上传文件中================" rm $file1 fi #上传文件 putftp $file echo `date +"%Y/%m/%d %H:%M:%S"`" 上传${file1}文件成功" &>$(printf "$log_file" "SM") mv $file1 BAK_$file1