Pfeffer
2019-11-20 18:40
采纳率: 33.3%
浏览 278

QT代码,里面调用了一些Ubuntu命令,不是很明白其用途

void Widget::on_pushButton_clicked(){



    QDateTime current_date_time = QDateTime::currentDateTime();
    QString targz, cmd_find, cmd_tar;

    if(ui->radioButton->isChecked()){ 

        cmd_find = "find ./ -type f | grep -v \'Permission denied\' > TEPLIST";// 将没有permisson denied的文件列出
        targz = current_date_time.toString("yyyy-MM-dd_hh.mm.ss") + ".full.tar.gz";
    }else{

        int minDiff = get_min(current_date_time); // 获得是最小的查值

        cmd_find = QString("find ./ -mmin -%1 -type f | grep -v \'Permission denied\' > TEPLIST").arg(minDiff);//??????
        targz = current_date_time.toString("yyyy-MM-dd_hh.mm.ss") + ".inc.tar.gz";
    }

    /*
     * 将上面重构后的命令进行执行-> 查找可压缩文件
     */

    QStringList cmd_pipe;// 初始化了一个String目录
    cmd_pipe << "-c" << cmd_find; // ????????
    cmd->start("/bin/bash",cmd_pipe); // 开始一个程序
    cmd->waitForFinished();
    cmd->close();

    cmd_tar = QString("tar --verbose --totals --exclude-vcs %1 --files-from=TEPLIST -czf %2/%3").arg(exclude_from).arg(dir_dest).arg(targz);// 

    cout << cmd_tar.data();
    runCommand(cmd_tar);
    QString err = QString::fromLocal8Bit(cmd->readAllStandardError());
    if(err.isEmpty())  outputInfo("Backup Suceess!");

    runCommand("rm TEPLIST");

    /*********** Encrypting*************/
    // gpg-k 增加公共钥匙
    if(ui->checkBox->isChecked()){
        QString cmd_isKey = "gpg -k " + gpg_key;//添加公钥
        runCommand(cmd_isKey);

        QString cmd_enc;
        QString out = QString::fromLocal8Bit(cmd->readAllStandardOutput());// ??????

        if(out.isEmpty())
            //  -o, --output FILE           write output to FILE
            // c 说是使用对称加密,看起来很奇怪
            /*
             * 我用你的公钥来加密我要发给你的数据,在你收到加密数据后用你的私钥解密就可以拿到原始数据。
             * 我用我的私钥“加密”一段公开的数据,你用我的公钥可以验证这段公开数据是否是我发出的。
             *
             */
            cmd_enc = QString("gpg -c -o %1/%2.gpg %1/%2").arg(dir_dest).arg(targz);// ????
        else
            // e 是加密数据 , 针对 用户 id 进行加密
            cmd_enc = QString("gpg -e -r %1 -o %2/%3.gpg %2/%3").arg(gpg_key).arg(dir_dest).arg(targz);//??????
        runCommand(cmd_enc);

        if(false == ui->checkBox_2->isChecked()){
            runCommand(QString("rm %1/%2.gpg").arg(dir_dest).arg(targz));

        }

        if(false == ui->checkBox_3->isChecked()){
            runCommand( QString("rm %1/%2").arg(dir_dest).arg(targz));
        }
    }
    backupInfo();
}

1. 

上面这串代码有几个小问题:

cmd_find = "find ./ -type f | grep -v \'Permission denied\' > TEPLIST";// 将没有permisson denied的文件列出

 cmd_find = QString("find ./ -mmin -%1 -type f | grep -v \'Permission denied\' > TEPLIST").arg(minDiff);//?????

这里面都有这个\'Permission denied\', 我对grep v的理解是把我find里面
找出的来的文件中,不符合上面这个字符串的文件都给排除掉,但是这个似乎只能排除掉文件名是含有的字符串,但是很明显,这个猜测是错的,我不知道这个字符串的意义是什么

  1. 还是上面这个,这个 -mmin是什么意思呢,他用getmin获取了最新时间和上次时间的差值,然后再把这个minDiff放进去,这是为了啥?

  2. 还是上面这个,

cmd_pipe << "-c" << cmd_find;

他在上面这个 生成的linux后面用了这个玩意儿,不知道是为啥

cmd_tar = QString("tar --verbose --totals --exclude-vcs %1 --files-from=TEPLIST -czf %2/%3").arg(exclude_from).arg(dir_dest).arg(targz);

我对这句话的理解是进行除了exclude文件里面的一些后缀之外都进行压缩,但是这个exclude后面的-vcs 是干嘛的?

 cmd_enc = QString("gpg -c -o %1/%2.gpg %1/%2").arg(dir_dest).arg(targz);// ????
        else
            // e 是加密数据 , 针对 用户 id 进行加密
            cmd_enc = QString("gpg -e -r %1 -o %2/%3.gpg %2/%3").arg(gpg_key).arg(dir_dest).arg(targz);//??????
        runCommand(cmd_enc);

上面是对 文件进行两种加密,这两种加密的区别是啥?

  1. 前面加一个 gpg -k 密码 是不是,直接就是生成了公钥,后面不用加文件名字吗?
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题