是否可以通过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文件列表,这种方法是否正常?
谢谢
答案 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(-
)。