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);
上面是对 文件进行两种加密,这两种加密的区别是啥?
Permission denied 是没有权限的意思, find ./ -type f 是查找当前目录下的所有文件, 并且会递归查找所有子目录, 如果当前用户没有权限访问某一个子目录, 这时find命令就会打印Permission denied, 这里grep -v 'Permission denied' 就是为了排除掉这部分输出
-mmin 表示查找的文件最近修改时间到当前时间的分钟数(当前时间往后取整分钟数), 至于minDiff使用QString的格式化用法, 效果就是会用minDiff替换命令中的-%1。 整体效果就是查找minDiff分钟内修改的文件列表
。。。
感觉你大多数Linux命令都看不懂,如果有疑问加Q:1306040659联系吧,csdn的编辑框真难用
linux的命令千千万,不可能每个都记住,告诉你2个获取这方面帮助的通用的方法
一个是命令 -h 或者 --h 或者 -help 之类的,一般内含一个简单的帮助提示
一个是直接google,查这个命令的来源的文档。