ftp命令的缺陷
在FTP中,put
命令通常用于上传单个文件,而不是整个文件夹。如果你想要上传整个文件夹,可以使用ncftp
命令行工具或者其他支持递归上传的FTP客户端。
以下是使用ncftp
命令行工具进行递归上传文件夹的示例:
#!/bin/bash
# 设置变量
FTP_SERVER="192.xx.xx.xx"
FTP_USER="user-xxx"
FTP_PASS="passwd-xxx"
LOCAL_DIR="/path/to/local/folder"
REMOTE_DIR="/path/on/remote/server/"
# 使用ncftp命令上传文件夹
ncftp -u $FTP_USER -p $FTP_PASS $FTP_SERVER << EOF
cd $REMOTE_DIR
mkdir $(basename "$LOCAL_DIR")
cd $(basename "$LOCAL_DIR")
lcd $LOCAL_DIR
put -R ./*
bye
EOF
请将/path/to/local/folder
替换为实际要上传的本地文件夹的路径,将/path/on/remote/server/
替换为FTP服务器上要存储文件夹的远程目录路径。
在脚本中,我们使用ncftp
命令连接到FTP服务器,并在输入重定向中提供了一系列的命令。-u
和-p
选项用于提供FTP用户名和密码进行身份验证。然后,我们依次执行了以下FTP命令:
cd
: 切换到远程目录。mkdir
: 在远程服务器上创建与本地文件夹同名的文件夹。cd
: 切换到新创建的远程文件夹。lcd
: 切换到本地文件夹。put -R
: 递归上传本地文件夹到远程服务器。
通过使用支持递归上传的FTP客户端,如ncftp
,你可以在Shell脚本中上传整个文件夹到指定的FTP服务器。
安装ncftp
yum install epel-release -y
yum install ncftp -y
ncftp一次上传多个目录
在FTP协议中,put -R
命令是用于递归上传一个目录及其子目录的内容到远程服务器的。它并不支持一次上传多个目录。
如果你想要一次上传多个目录,你可以编写一个循环或使用其他的脚本逻辑来实现。以下是一个示例脚本,演示了如何一次上传多个目录:
#!/bin/bash
# 设置变量
FTP_SERVER="192.xx.xx.xx"
FTP_USER="user-xxx"
FTP_PASS="passwd-xxx"
REMOTE_DIR="/path/on/remote/server/"
# 定义本地目录列表
LOCAL_DIRS=(
"/path/to/local/dir1"
"/path/to/local/dir2"
"/path/to/local/dir3"
)
# 使用ncftp命令上传多个目录
for dir in "${LOCAL_DIRS[@]}"; do
ncftpput -R -u $FTP_USER -p $FTP_PASS $FTP_SERVER $REMOTE_DIR "$dir"
done
在脚本中,我们首先定义了一个LOCAL_DIRS
数组,其中包含要上传的多个本地目录路径。然后,使用for
循环遍历该数组,使用ncftpput
命令逐个上传每个目录到远程服务器。
请确保将/path/to/local/dir1
、/path/to/local/dir2
等替换为实际要上传的本地目录路径,将/path/on/remote/server/
替换为FTP服务器上要存储目录的远程路径。
通过这种方式,你可以在Shell脚本中一次上传多个目录到指定的FTP服务器。