bash - 使用 lftp 执行动态命令 - 多个命令

标签 bash shell loops ftp lftp

我确信有一个简单的方法可以做到这一点,但我没有找到它。我想做的是使用 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/

相关文章:

grep -E 中的正则表达式未按预期工作

javascript - 如何缩短重复的 javascript php 代码

php - 在 foreach 循环中正确使用 foreach 循环

bash - bash 中格式化的目录树

python - 即时获取另一个程序的输出作为输入

Bash 参数扩展 - 获取文件的直接父目录

bash - 在 shell 中计算 15 分钟前

C++ 字符串大小在循环期间发生变化

php - cpanel/whm如何执行linux命令

linux - 从 bash 学习 Windows Powershell 的最佳方式是什么?