dgo*_*dgo 3 ftp bash shell loops lftp
我确信有一种简单的方法可以做到这一点,但我找不到它.我想要做的是使用lftp执行一系列命令,我想尽可能避免重复连接到服务器.
基本上,我有一个文件,其中列出了服务器上的ftp目录.我想连接到服务器,然后执行如下所示的事情:(假设此时我已经使用cat将文本文件转换为行数组)
for f in "${myarray}"
do
cd $f;
nlist >> $f.txt;
cd ..;
done
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,但我必须想象有一个简单的解决方案,我想要实现的目标.
在shell脚本方面,我很缺乏经验.有什么建议?
首先构建一个包含lftp命令列表的字符串.然后调用lftp,在其标准输入上传递命令.Lftp本身可以将命令的输出重定向到文件,其语法类似于shell.
list_commands=""
for dir in "${myarray[@]}"; do
list_commands="$list_commands
cd \"$dir\"
nlist >\"$dir.txt\"
cd .."
done
lftp <<EOF
open -u $username,$password $site
$list_commands
bye
EOF
Run Code Online (Sandbox Code Playgroud)
请注意,我假设目录名称不包含反斜杠,单引号或通配符.如有必要,添加适当的转义.
顺便说一句,要从文件中读取行,请参阅为什么while IFS= read经常使用,而不是IFS=; while read..?.您可能更喜欢将目录列表中的读取与构建命令结合起来:
list_commands=""
while IFS= read -r dir; do
list_commands="$list_commands
cd \"$dir\"
nlist >\"$dir.txt\"
cd .."
done <directory_list.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |