您好,欢迎访问一九零五行业门户网

上传单个文件到多台机器工具_PHP教程

上传单个文件到多台机器工具使用示例:
./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -p='root123' -s=./abc -d=/tmp/
表示将本地的文件./abc上传到两台机器192.168.10.11和192.168.10.12的/tmp/目录
#include mooon/net/libssh2.h
#include mooon/sys/stop_watch.h
#include mooon/utils/args_parser.h
#include mooon/utils/print_color.h
#include mooon/utils/string_utils.h
#include mooon/utils/tokener.h
#include
#include
// 逗号分隔的远程主机列表
string_arg_define(h, , remote hosts);
// 远程主机的sshd端口号
integer_arg_define(uint16_t, p, 22, 10, 65535, remote hosts port);
// 用户名
string_arg_define(u, root, remote host user);
// 密码
string_arg_define(p, , remote host password);
// 被上传的文件路径
string_arg_define(s, , the source file uploaded);
// 文件上传后存放的目录路径
string_arg_define(d, , the directory to store);
// 连接超时,单位为秒
integer_arg_define(uint16_t, t, 10, 1, 65535, timeout seconds to remote host);
// 结果信息
struct resultinfo
{
bool success; // 为true表示执行成功
std::string ip; // 远程host的ip地址
uint32_t seconds; // 运行花费的时长,精确到秒
resultinfo()
: success(false), seconds(0)
{
}
std::string str() const
{
std::string tag = success? success: failure;
return mooon::utils::cstringutils::format_string([%s %s]: %u seconds, ip.c_str(), tag.c_str(), seconds);
}
};
inline std::ostream& operator {
std::string tag = result.success? success: failure;
out return out;
}
int main(int argc, char* argv[])
{
// 解析命令行参数
std::string errmsg;
if (!mooon::utils::parse_arguments(argc, argv, &errmsg))
{
fprintf(stderr, parameter error: %s\n, errmsg.c_str());
exit(1);
}
uint16_t port = mooon::argument::p->value();
std::string source = mooon::argument::s->value();
std::string directory = mooon::argument::d->value();
std::string hosts = mooon::argument::h->value();
std::string user = mooon::argument::u->value();
std::string password = mooon::argument::p->value();
mooon::utils::cstringutils::trim(source);
mooon::utils::cstringutils::trim(directory);
mooon::utils::cstringutils::trim(hosts);
mooon::utils::cstringutils::trim(user);
mooon::utils::cstringutils::trim(password);
// 检查参数(-s)
if (source.empty())
{
fprintf(stderr, parameter[-s]'s value not set\n);
exit(1);
}
// 检查参数(-d)
if (directory.empty())
{
fprintf(stderr, parameter[-d]'s value not set\n);
exit(1);
}
// 检查参数(-h)
if (hosts.empty())
{
// 尝试从环境变量取值
const char* hosts_ = getenv(hosts);
if (null == hosts_)
{
fprintf(stderr, parameter[-h]'s value not set\n);
exit(1);
}
hosts= hosts_;
mooon::utils::cstringutils::trim(hosts);
if (hosts.empty())
{
fprintf(stderr, parameter[-h]'s value not set\n);
exit(1);
}
}
// 检查参数(-u)
if (user.empty())
{
fprintf(stderr, parameter[-u]'s value not set\n);
exit(1);
}
// 检查参数(-p)
if (password.empty())
{
fprintf(stderr, parameter[-p]'s value not set\n);
exit(1);
}
std::vector hosts_ip;
const std::string& remote_hosts_ip = hosts;
int num_remote_hosts_ip = mooon::utils::ctokener::split(&hosts_ip, remote_hosts_ip, ,, true);
if (0 == num_remote_hosts_ip)
{
fprintf(stderr, parameter[-h] error\n);
exit(1);
}
std::string remote_filepath = directory + std::string(/) + mooon::utils::cstringutils::extract_filename(source);
std::vector results(num_remote_hosts_ip);
for (int i=0; i{
bool color = true;
const std::string& remote_host_ip = hosts_ip[i];
results[i].ip = remote_host_ip;
results[i].success = false;
fprintf(stdout, [print_color_yellow%sprint_color_none]\n, remote_host_ip.c_str());
fprintf(stdout, print_color_green);
mooon::sys::cstopwatch stop_watch;
try
{
int file_size = 0;
mooon::net::clibssh2 libssh2(remote_host_ip, port, user, password, mooon::argument::t->value());
libssh2.upload(source, remote_filepath, &file_size);
fprintf(stdout, [print_color_yellow%sprint_color_none] success: %d bytes\n, remote_host_ip.c_str(), file_size);
results[i].success = true;
}
catch (mooon::sys::csyscallexception& ex)
{
if (color)
fprintf(stdout, print_color_none); // color = true;
fprintf(stderr, [print_color_red%sprint_color_none] failed: %s\n, remote_host_ip.c_str(), ex.str().c_str());
}
catch (mooon::utils::cexception& ex)
{
if (color)
fprintf(stdout, print_color_none); // color = true;
fprintf(stderr, [print_color_red%sprint_color_none] failed: %s\n, remote_host_ip.c_str(), ex.str().c_str());
}
results[i].seconds = stop_watch.get_elapsed_microseconds() / 1000000;
std::cout }
// 输出总结
std::cout std::cout int num_success = 0; // 成功的个数
int num_failure = 0; // 失败的个数
for (std::vector::size_type i=0; i{
const struct resultinfo& result_info = results[i];
std::cout
if (result_info.success)
++num_success;
else
++num_failure;
}
std::cout
return 0;
}
http://www.bkjia.com/phpjc/1117250.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1117250.htmltecharticle上传单个文件到多台机器工具 使用示例: ./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -p='root123' -s=./abc -d=/tmp/ 表示将本地的文件./abc上传...
其它类似信息

推荐信息