Um pouco antigo, mas a maioria das respostas ignora completamente o ponto da pergunta:
But I figured I'd try to figure out if there is simply a way to determine if the file is whole at the command line first...
Em geral, não há. Você simplesmente não tem informações suficientes para determinar isso.
Porque determinar que o arquivo é fechado não é o mesmo que determinar se o arquivo é inteiro . Por exemplo, um arquivo será "fechado" se a conexão for perdida no meio da transferência.
Apenas a resposta de @ Alex acertou. E até ele caiu por usar lsof
.
Para determinar se o arquivo foi totalmente transferido com sucesso, é necessário mais dados. Tais como:
One alternative I was thinking of was to have the file be copied as a different file extension (like .tar.gz.part
) and then renamed to .tar.gz
after the transfer is complete.
Essa é uma maneira perfeita de comunicar que o arquivo foi totalmente transferido com sucesso. Você também pode mover arquivos de um diretório para outro, desde que permaneça dentro do mesmo sistema de arquivos. Ou peça ao remetente que envie um arquivo filename.done
vazio para sinalizar a conclusão.
Mas todos os métodos têm que confiar no remetente de alguma forma sinalizando que a transferência foi concluída com sucesso. Porque apenas o remetente tem essa informação.
Alguns formatos de arquivo (como PDFs) contêm dados que permitem determinar se o arquivo está completo. Mas você tem que abrir e ler praticamente todo o arquivo para descobrir.
lsof
apenas informará que o arquivo não está mais aberto - ele não informará por que ele não está mais aberto. Também não vai dizer o tamanho do arquivo.