3

我确信有一种简单的方法可以做到这一点,但我没有找到它。我想要做的是使用lftp执行一系列命令,如果可能的话,我想避免重复连接到服务器。

基本上,我在服务器上有一个文件,其中包含一个完整的 ftp 目录列表。我想连接到服务器,然后执行如下操作:(假设此时我已经使用 cat 将文本文件转换为行数组)

for f in "${myarray}"
do
cd $f;
nlist >> $f.txt;
cd ..;
done

当然这不起作用,但我必须想象有一个简单的解决方案来解决我想要完成的事情。

在 shell 脚本方面,我非常缺乏经验。有什么建议么?

4

1 回答 1

6

首先构建一个包含 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

请注意,我假设目录名称不包含反斜杠、单引号或通配符。如有必要,添加适当的转义。

顺便说一句,要从文件中读取行,请参阅为什么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
于 2012-08-30T17:19:34.037 回答