使用SSH传输文件的脚本

我想从服务器上的目录传输特定types的文件。 所以这里是现场:

目录结构是

公司/ COMPA / FILEDIR /
公司/ COMPB / FILEDIR /
公司/使用compc / FILEDIR /

所以我想把* .csv文件从每个公司的filedir目录移动到其他服务器。 我想用ssh进行文件传输。 有没有人在shell脚本中使用ssh进行文件传输? 你如何处理这种情况?

使用scprsync

scp使用ssh将文件复制到连接的计算机上和从中连接。 从本地计算机复制到远程主机的示例语法:

 scp -r companies/compA/filedir [email protected]:/some/remote/directory 

你需要使用公钥/私钥才能方便login,如果你还没有这样做的话。

rsync可以使用ssh来连接到另一台服务器。 示例语法是:

 rsync -avz -e ssh remoteuser@remotehost:/remote/dir /companies/compA/filedir 

它还需要启用公钥/私钥。

你实际上想要使用使用SSH的scp。 如果您想要使用rsync,则需要使用-e ssh参数。

至于编写脚本,你可能会创build1)for循环遍历一个数组,其中包含所有位置的列表,并运行相应的scp / rsync命令或2)您可以使用find语句来遍历并执行scp / rsync命令为你。

find命令的例子就像(未经testing的):

find /dir/companies/*/filedir/ -type f -name \*.csv -exec scp {} [email protected] \;

我build议如果你使用SSH进行任何types的传输,你需要设置一些公钥authentication,这样你就不会被提示input密码。

如果需要的话,我可以详细介绍一下,试着让你开始,并指出正确的方向。

你不会使用ssh程序 – 你应该使用scp或sftp。 但是说了一个更好的解决scheme是通过ssh运行rsync,以避免复制已经收到的文件 – 但是如果rsync可用(或者可以安装在远程系统上),这只是一个选项。

为了避免必须提供密码,您需要首先设置一个密钥对,然后只需:

 #!/bin/bash scp somuser@server:/companies/compA/filedir/*.csv /local/compa/filedir scp somuser@server:/companies/compB/filedir/*.csv /local/compb/filedir scp somuser@server:/companies/compC/filedir/*.csv /local/compC/filedir 

scp公司/ comp?/ filedir / *。csv 192.168.1.200:/remotedir是192.168.1.200远程服务器ip。

如果你需要用户并且通过你应该检查scp手册(man scp),但我相信你不能在scp命令中指定那些手册。 相反,你应该使用密钥。