假设我有一个 100GB 的文件,我想在具有 120GB 硬盘内存和小 RAM 的系统上对其进行 GPG 加密。
如何在不使用外部存储器的情况下解密文件,即gpg 加密文件并并行逐步删除未加密的版本?
答案1
请注意:如果删除文件的一部分,并且过程中途中断怎么办?
磁盘空间很便宜,因此尝试以这种方式节省磁盘空间几乎没有任何意义。
如果您确实必须这样做,我的建议是分块处理文件。取出一个块,对其进行加密,然后删除原始文件的该部分。然后处理下一个块,依此类推。这样,如果进程中断,您可以删除未完成的加密块并恢复进程。通过这种方法,可以更轻松地从头到尾处理文件。
警告:未经测试的代码。假设使用 GNU 或 BusyBox 实用程序(例如 Linux)和 64 位 shell(处理超过 2GB 的文件大小)。
#!/bin/sh
set -e
input_size=$(stat -c %s myfile)
fragment_size=$((1024*1024*1024))
while [ "$input_size" -gt 0 ]; do
chunk_size=$((input_size % fragment_size)) || chunk_size=$fragment_size
input_size=$((input_size - fragment_size))
fragment_name=$(printf fragment-%08d "$((input_size / fragment_size))")
tail -c "$((input_size+1))" myfile | gpg -e >"$fragment_name.gpg.tmp"
mv "$fragment_name.gpg.tmp" "$fragment_name.gpg"
truncate -s "$input_size" myfile
done