我想从服务器上的目录传输特定类型的文件。以下是场景:
目录结构是
公司/compA/filedir/
公司/compB/filedir/
公司/compC/filedir/
所以我想将 *.csv 文件从每个公司的 filedir 目录移动到其他服务器。我想使用 ssh 进行文件传输。有人在 shell 脚本中使用 ssh 进行文件传输吗?你如何处理这种情况?
答案1
使用scp
或rsync
。
scp
使用 ssh 在连接的计算机之间复制文件。从本地计算机复制到远程主机的示例语法:
scp -r companies/compA/filedir [email protected]:/some/remote/directory
如果您尚未执行此操作,则需要使用公钥/私钥来方便登录ssh
。
rsync
可以使用 ssh 连接到另一台服务器。示例语法如下:
rsync -avz -e ssh remoteuser@remotehost:/remote/dir /companies/compA/filedir
它还需要启用公钥/私钥。
答案2
您实际上可能想要使用使用 SSH 的 scp。如果您想改用 rsync,则需要使用参数-e ssh
。
至于脚本,您可能会创建 1)一个 for 循环,该循环遍历包含所有位置列表的数组并运行相应的 scp/rsync 命令,或者 2)您可以使用 find 语句,该语句遍历并为您执行每个 scp/rsync 命令。
find 命令示例如下(未经测试):
find /dir/companies/*/filedir/ -type f -name \*.csv -exec scp {} [email protected] \;
我建议如果您使用 SSH 进行任何类型的传输,请设置某种公钥身份验证,这样就不会提示您输入密码。
如果需要的话,我可以更详细地讲解,只是想帮助您入门并指明正确的方向。
答案3
您不会使用 ssh 程序 - 您应该使用 scp 或 sftp。但话虽如此,更好的解决方案是通过 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
答案4
scp company/comp?/filedir/*.csv 192.168.1.200:/remotedir 为 192.168.1.200 远程服务器 ip。
如果需要用户和密码,则应查看 scp 手册 (man scp),但我认为您无法在 scp 命令中指定这些。相反,您应该使用密钥。