2014-10-30 145 views
0

我有一个目录名称列表。scp shell脚本中的多个文件

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

我到目前为止有:

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

我已成立了,这样我就不用每次都输入密码授权密钥 - 但这种方法并登录到远程机器的每一个文件,它转移。我认为有比这更好的方法。

回答

4

您可以通过用空格分隔单个scp参数来指定多个文件;你只需要确保它是scp本身的一个参数。这应该工作你的情况:

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

sed命令贴在每一行/home/前缀和.dat后缀; xargs在由空格分隔的单个行上输出所有得到的路径名。在remote_machine:部分之后将所有内容插入到源参数中,所有内部都使用双引号,所以它仍然是scp的单个参数,而且您很好。