scp shell脚本中的多个文件

时间:2014-10-30 00:28:59

标签: shell

我有一个目录名列表。

我想scp进入远程计算机,进入每个目录名称并将文件复制回本地计算机。

我到目前为止:

while read line
    do
        scp remote_machine:/home/$line/$line.dat ./local
    done < file_with_directory_names.txt

我设置了授权密钥,因此我不必每次都输入密码 - 但是这种方法会为每个传输的文件登录到远程计算机。我想有一个比这更好的方法。

1 个答案:

答案 0 :(得分:4)

您可以在单个scp参数中指定多个文件,方法是用空格分隔;你只需要确保它是scp本身的一个参数。这应该适合你的情况:

scp "remote_machine:$(
    sed 's,.*,/home/&/&.dat,' file_with_directory_names.txt | xargs)" ./local

sed命令在每一行上添加/home/前缀和名称 .dat后缀; xargs输出由空格分隔的单行上的所有结果路径名。将所有内容插入到remote_machine:部分后面的源参数中,所有内部都是双引号,因此它仍然只是scp的一个参数,你很高兴。