echo >file
teria sido a solução direta. Mas depois de excluir o arquivo, isso não é mais possível.
Mas espere! Como você está usando um sistema de arquivos ext4, presumo que este tar esteja rodando no Linux. (Algumas, mas não todas, as variantes Unix permitem uma solução semelhante.) No Linux, você ainda pode acessar um arquivo excluído, mas aberto via /proc/PID/fd/FD
, em que PID
é o ID do processo que tem o arquivo aberto e FD
é o descritor de arquivo pelo qual o arquivo está aberto. Este arquivo é um link simbólico para o arquivo, mas é um link mágico. Ele permanece válido mesmo se o arquivo for excluído. Se você olhar para ele com ls -l
, verá algo como
/proc/1234/fd/4 -> /path/to/file (deleted)
em toda a aparência um link quebrado, mas na verdade você pode abrir este arquivo. Em
Em particular, você pode truncá-lo com algo como : >/proc/1234/fd/4
.
Se você estiver trabalhando em um sistema sem /proc
, poderá usar um depurador para fazer com que o próprio processo tar execute o truncamento para você. Anexe o depurador ao processo e, em seguida, execute truncate(4)
, em que 4 é o descritor de arquivo do qual o tar está lendo. Por exemplo, com o GDB, você pode tentar algo como
$ ps
… find the PID of the tar process, e.g. 1234
$ lsof -p1234
… find the file descriptor that you want to act on, e.g. 4
$ gdb -pid 1234
…
(gdb) call truncate(4)
(gdb) detach
Isso pode ou não confundir o tar, já que poderia renderizar algumas estruturas de dados que ele está usando de maneira inconsistente, por isso recomendo experimentar antes de testá-lo.