Como redirecionar a saída de um comando para um arquivo já existente sem excluir seu conteúdo? [duplicado]

11

Estou fazendo um backup de alguns arquivos e estou criando um arquivo de soma de verificação, checksums.txt , para verificar mais tarde a integridade dos meus dados. No entanto, colar cada soma de verificação manualmente no arquivo é inconveniente, pois meu backup consiste em centenas de arquivos. Por isso, pedi a sugestão de simplificar o processo, redirecionando a saída para o arquivo de soma de verificação:

$ md5sum file > checksums.txt

ou

$ sha512sum file > checksums.txt

No entanto, isso substitui o conteúdo do arquivo checksums.txt com a soma de verificação de, neste exemplo, o arquivo file ; Em vez disso, gostaria de anexar a soma de verificação de file a checksums.txt sem excluir seu conteúdo. Então, minha pergunta é: como faço isso?

Apenas mais uma coisa. Desde que eu sou um usuário básico, tente (somente se possível) para fazer sugestões fáceis de seguir.

    
por Carl Rojas 18.10.2015 / 23:08

2 respostas

23

Se você deseja anexar a um arquivo, use >> .

Então, seus exemplos seriam

$ md5sum file >> checksums.txt

e

$ sha512sum file >> checksums.txt
    
por 18.10.2015 / 23:13
9

Ao lado do operador >> para abrir o arquivo no modo de acréscimo respondido por @Thomas , uma outra opção é para abrir o arquivo com o operador > , mas apenas uma vez e deixe-o aberto para os dois comandos:

exec 3> checksums.txt

Abrir (e truncar) o arquivo no descritor de arquivo 3 e, em seguida:

md5sum file1 >&3

Escrevia o md5sum do arquivo1 lá.

md5sum file2 >&3

(quando executado a partir desse mesmo shell), anexaria o arquivo2 md5sum.

Então, você pode fazer:

exec 3>&-

para fechar esse descritor de arquivo. Você também pode fazer o mesmo com stdout (descritor de arquivo 1, o padrão para o operador > ), redirecionando um grupo inteiro de comandos :

{ md5sum file1; md5sum file2; } > checksums.txt

Ou usando um subshell em vez de um grupo de comandos :

(md5sum file1; md5sum file2) > checksums.txt
    
por 19.10.2015 / 15:25