使用基于主列表的sftp提取文件

时间:2016-05-27 02:02:00

标签: shell unix

是否可以通过sftp从主列表中提取某些文件。

示例:

目录包含ff文件。

aa.txt
bb.txt
cc.txt

masterlist.txt包含:

aa.txt
bb.txt

应提取的文件

aa.txt
bb.txt

编辑:

感谢@shellter提供的反馈意见。 我确实尝试编写自己的代码,但无法找到我可以处理的样本(我不是unix人btw)。

无论如何,至于你关于使用while-read-line的建议,我已经尝试了但是我收到了无效的命令错误。

#!/bin/ksh
file=MasterList.txt

while IFS= read -r line
do
echo "fetching $line"
sftp user@192.168.1.101
cd /data/EP_files/balex
get "$line"
bye
done <"$file"

最后,如果我的主文件包含10k文件列表,这种方法是否正常?

谢谢

1 个答案:

答案 0 :(得分:1)

您需要创建整个SFTP命令序列 - 包括输入列表预先中所有文件的单独get命令,然后仅调用sftp < em>一次,通过stdin(标准输入)传递命令列表:

#!/usr/bin/env ksh

file=MasterList.txt

sftp -b - user@192.168.1.101 <<EOF
cd /data/EP_files/balex
$(sed -n 's/^file_.*/get "&"/p' "$file")
bye
EOF

<<EOF ... EOF块是一个所谓的here-document,它允许通过stdin传递多行字符串(可选地带有嵌入式变量引用和命令)。

sed -n 's/^file_.*/get "&"/p' "$file"get中以$file开头的每个文件名嵌入file_命令,忽略任何其他行(根据评论中的OP请求)。< / p>

以上假设您的sftp实用程序接受&#34;批处理&#34;中的命令列表。模式通过-b选项通过stdin(-)。