因为要使用 shell 执行实际的加密,文件名必须进行编码。需要对一些特殊字符进行转义,否则 shell 会解释它们。
对于实际的加密,使用 openssl 和一个简单的文本文件(在 /var/lib/passphrase 中),这个文件包含信息编码所用的密码。还可以创建或使用专门生成的密钥来执行此操作或希望使用的其他加密命令。
最后,因为源目录中可能有已经删除的文件,还要把删除的文件从加密目录内容中删除(见清单 8)。
清单 8. 把删除的文件从加密目录内容中删除
foreach my $file (@delfiles)
{
unlink("$encdest/$file");
$delcounter++;
}
这个脚本非常有效,惟一的缺点是它需要信息的两个拷贝(参照目录和加密版本),而不只是一个。另外,为了简化这个过程,并没有把权限、所有者和时间戳信息同步到加密版本,但是很容易添加这个特性。因为这个脚本使用 rsync 生成修改的列表,这会显著减少需要加密的文件数量,可以使用相同的优化算法把新的文件加密版本同步到远程主机,从而只传输在上一次同步操作之后修改过的加密文件。
结束语
本文讨论了几种不同的文件同步方法。基本的 cp 命令并不是真正的同步命令,但是可以用来执行直接复制。对于真正的同步操作,cp 命令花费的时间太长,效率很低。在使用 tar 时,可以指定一个时间参照点,只复制在这个时间点之后修改过的文件。但是,如果修改不明显或无法通过简单的比较查明,这个特性的意义也不大。
rsync 工具是更好的文件同步解决方案。它对源和目标目录执行许多检查和比较,可以实现高效的同步,甚至可以通过网络或公共连接执行同步。为了确保安全,可以结合使用 rsync 与加密技术,确保在没有正确的密码或加密密钥的情况下无法读取远程文件。
标签: