我需要有关将文件从 FTP 服务器下载到本地服务器的帮助。
为了下载,我需要使用 FTP 批处理模式功能,并且我有一个包含所有需要下载的文件的 txt 文件。
文件.txt
cap/media/101/101.mp4
cap/media/102/102.mp4
cap/media/103/103.mp4
cap/media/104/104.mp4
cap/media/105/105.mp4
cap/media/106/106.mp4
cap/media/101
是FTP用户根目录内的文件夹结构,101.mp4是文件。
因此 1000 个文件的文件夹结构相同,并且 mp4 的位置如所列出的。
所以我需要一个可以以批处理模式运行并自动将所有文件下载到本地存储的 bash 脚本。
我已经创建了该脚本,但它不起作用,希望有人能给我一些提示,
###########################
HOST="ftp.remote.com"
USER="media"
PASSWORD="test"
FILE="/tmp/list.txt"
###########################
cd /tmp/
while read p; do
pt=$(dirname $p);
h="/"
pth=$pt$h
mxf=$(basename $p);
#echo $pth;
#echo $mxf;
ftp -n -v >> /tmp/filetransfer.log 2>&1 $HOST <<EOF
binary
user $USER $PASSWORD
prompt
lcd /tmp/media
cd $pth
mget $mxf
quit
EOF
done < /tmp/list.txt
这是 FTP 的输出,您能帮我一下吗,我不明白我到底做错了什么。
Connected to ftp.remote.com
220-FTPD
220 This is a private system - No anonymous login
200 TYPE is now 8-bit binary
331 User media OK. Password required
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
Interactive mode off.
Local directory now /tmp/media
250 OK. Current directory is cap/media
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
我遇到了这个错误:221-再见。您已上传 0 并下载 0 千字节。
提前感谢您的任何评论和建议。
答案1
按照评论说的做,这应该会有效:
HOST="ftp.remote.com" USER="media" PASSWORD="test" FILE=`cat /tmp/list.txt` cd /tmp/localstorage ftp -n -v >> /tmp/ftptransfer.log 2>&1 $HOST <<END_SCRIPT ascii user $USER $PASSWORD prompt mget $FILE quit END_SCRIPT
答案2
我编写了以下脚本以避免文件名包含空格时出现错误:
#!/bin/bash
host=ftp://ftp.local
username=user
password=pw
cmd="curl -O -u ${username}:${password} ${host}/"
cd public_html
cat ~/list.txt | while read files ; do $cmd"${files}" | echo ${files};
done | tee -a ~/ftp.log