Cuidado: e se você excluir parte de um arquivo e o processo for interrompido no meio?
O espaço em disco é barato, então quase não há sentido em tentar economizar espaço em disco dessa maneira.
Se você realmente tiver que fazer isso, minha recomendação é processar o arquivo em partes. Pegue um trecho, criptografe-o e exclua essa parte do arquivo original. Em seguida, processe o próximo pedaço e assim por diante. Dessa forma, se o processo for interrompido, você poderá remover o fragmento criptografado não concluído e retomar o processo. Com essa abordagem, é mais fácil processar o arquivo do final para o começo.
Aviso: código não testado. Assume utilitários GNU ou BusyBox (por exemplo, Linux) e um shell de 64 bits (para lidar com tamanhos de arquivo acima de 2 GB).
#!/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