我确信有一个简单的方法可以做到这一点,但我没有找到它。我想做的是使用 lftp 执行一系列命令,我想尽可能避免重复连接到服务器。
基本上,我在服务器上有一个包含完整 ftp 目录列表的文件。我想连接到服务器然后执行类似以下的操作:(假设此时我已经使用 cat 将文本文件转换为行数组)
for f in "${myarray}"
do
cd $f;
nlist >> $f.txt;
cd ..;
done
当然这行不通,但我必须想象有一个简单的解决方案可以解决我想要完成的任务。
我在 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
请注意,我假设目录名称不包含反斜杠、单引号或通配符。如有必要,添加适当的转义。
顺便说一下,要从文件中读取行,请参阅 Why is while IFS= read
used so often, instead of 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
关于bash - 使用 lftp 执行动态命令 - 多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12201813/