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里面
找出的来的文件中,不符合上面这个字符串的文件都给排除掉,但是这个似乎只能排除掉文件名是含有的字符串,但是很明显,这个猜测是错的,我不知道这个字符串的意义是什么
还是上面这个,这个 -mmin是什么意思呢,他用getmin获取了最新时间和上次时间的差值,然后再把这个minDiff放进去,这是为了啥?
还是上面这个,
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);
上面是对 文件进行两种加密,这两种加密的区别是啥?
- 前面加一个 gpg -k 密码 是不是,直接就是生成了公钥,后面不用加文件名字吗?