Esvazie o conteúdo de um arquivo

200

Estou ciente de três métodos para excluir todas as entradas de um arquivo.

Eles são

  • >filename
  • touch filename
  • filename < /dev/null

Destes três eu abusei mais de >filename , pois isso exige o menor número de toques de tecla.

No entanto, gostaria de saber qual é o mais eficiente dos três (se houver métodos mais eficientes) com relação a arquivos de log grandes e arquivos pequenos.

Além disso, como os três códigos operam e excluem o conteúdo?

    
por debal 30.08.2013 / 07:13

3 respostas

272

Na verdade, o segundo formulário touch filename não exclui nada do arquivo - ele apenas cria um arquivo vazio se não existir ou atualiza a data da última modificação de um arquivo existente.

E o terceiro filename < /dev/null tenta executar o nome do arquivo com /dev/null como entrada.

cp /dev/null filename funciona.

Como para eficiente, o mais eficiente seria truncate -s 0 filename ; veja aqui: link .

Caso contrário, cp /dev/null filename ou > filename estão bem. Ambos abrem e fecham o arquivo, usando a configuração truncar em aberto. cp também abre /dev/null , o que o torna marginalmente mais lento.

Por outro lado, truncate provavelmente seria mais lento que > filename quando executado a partir de um script, pois a execução do comando truncate exige que o sistema abra o executável, carregue-o e execute-o.

    
por 30.08.2013 / 07:19
36

Outra opção poderia ser:

echo -n > filename

Na página do manual de echo :

-n Do not print the trailing newline character.

    
por 23.04.2016 / 22:35
0

Existe um comando interno ":", que está disponível em sh, csh, bash e outros, talvez, que pode ser facilmente usado com o operador de saída de redirecionamento > truncate a file:

#!/usr/bin/env bash
:> filename

O que eu gosto nisso é que ele não precisa de nenhum comando externo como "echo", etc.

Uma grande vantagem de truncar arquivos em vez de delineá-los / recriá-los é que os aplicativos em execução que funcionam com esse arquivo (por exemplo, alguém cria um tail -f filename ou um software de monitoramento ...) não precisam reabri-lo. Eles apenas podem continuar usando o filedescriptor e obtendo todos os novos dados.

    
por 03.12.2018 / 10:59