用于从远程 FTP 服务器上的源目录下载文件的 Shell 脚本
在本文中,我们将编写一个 shell 脚本,使用 FTP 将服务器中某个目录中的文件下载到本地计算机。建议在阅读本文之前先了解一些 FTP 知识,但这不是必需的。
在编写shell脚本之前,我们先看看如何直接使用命令下载文件,然后我们将其扩展为脚本。
用于下载文件的FTP命令是“get”和“mget” ,分别用于下载单个或多个文件。这些命令应该在 FTP 提示中输入。文件总是从服务器上的“当前目录”下载。没有办法指定从哪个目录下载,所以在下载之前我们首先要切换到需要的源目录。
用于下载文件的命令列表(示例显示在下面的问题中):
1. get filename #download file
2. mget file1 file2 #download multiple files
3. cd dirname #change remote directory
4. lcd dirname #change local directory
5. ftp hostname #login to ftp server
6. bye #terminate ftp connection and quit ftp
考虑以下问题以了解使用 FTP 下载文件:
将服务器内部的src目录下的“f1.txt”和“program1.c”2个文件下载到本地计算机的dst目录下。
下载的逐步实现:
步骤 1:首先,使用“ftp hostname”命令登录到 ftp 并输入登录详细信息。
步骤 2:使用“cd src”切换到服务器上的 src 目录,并使用“lcd dst”切换到本地计算机上的 dst 目录。
第 3 步:现在输入“ mget file1.txt program1.c”来下载文件。然后键入“bye”终止 FTP 连接并退出 FTP 提示。
在 Stepwise 中执行下载的 shell 脚本:
步骤 1:首先,将 FTP 登录详细信息存储在脚本内的变量中。这些值不会改变,因此您不需要每次都询问用户,并且可以方便地登录服务器。
HOST = "192.168.0.104" #Server's hostname
USER = "lapowner" #Server login username
PASSWORD = "1234asdf@Z" #Server login password
第 2 步:通过脚本的参数将源目录和要下载的文件列表作为输入。
SOURCE = $1
#$1 is the first argument to the script
ALL_FILES="${@:2}"
#${@:2} is the list of arguments without the first one
第 3 步:使用参数 -inv 或 -i -n -v 编写 FTP 命令。
参数说明如下:Parameter Description -i Disable interactive mode in ftp. By using this, ftp will not ask for confirmation for every file being downloaded. -n Helps to log in manually to ftp using “user $USERNAME $PASSWORD”. Without, this ftp would assume your local desktop’s username as the server’s username. -v Verbose mode for ftp. This makes the output more detailed.
此外,通过使用“<<”的输入重定向向 FTP 提供 FTP 命令(如 mget 等)。使用“EOF”标记FTP输入的开始和结束。
ftp -inv $HOST <
第 4 步:使用参数 i) 源目录和 ii) 文件列表运行脚本:
./script.sh file1
#for downloading file1
./script.sh *.c file1
#for downloading file1 and all c files
从远程 FTP 服务器上的源目录下载文件的完整 Shell 脚本:
#!/bin/bash
HOST = "192.168.0.104"
USER = "lapowner"
PASSWORD = "1234asdf@Z"
SOURCE = $1
ALL_FILES = "${@:2}"
ftp -inv $HOST <
输出: