Questão Como limpar o conteúdo de um arquivo da linha de comando?


Eu tenho um arquivo de log que tem um monte de coisas que eu não preciso mais. Eu quero limpar o conteúdo.

Eu sei imprimir o conteúdo na tela:

cat file.log

Eu sei como editar o arquivo, linha por linha:

nano file.log

Mas não quero excluir cada linha de uma vez. Existe uma maneira de fazer isso em um comando sem destruir o arquivo para fazer isso?


227


origem




Respostas:


Na festança, apenas

> filename

vai fazer.

Isso vai deixar você com um arquivo vazio nome do arquivo.

p.s.

Se você precisar sudo ligue, por favor, considere usar truncate Como respondeu aqui.


389



Este é provavelmente o comando mais radiante da história da computação - blarg
Pelo contrário, @ Arekkusandaa.Irujasukin; funciona muito bem em qualquer versão do Windows, desde que, como mencionado, você esteja usando bash como sua concha e não e. g. cmd.exe ou PowerShell, nenhum dos quais é POSIXy o suficiente para ser esperado para lidar com essas coisas. - DopeGhoti


Você pode usar o comando do usuário: truncar

truncate -s 0 test.txt

("-s 0" para especificar o tamanho)

http://www.commandlinefu.com/commands/view/12/empty-a-file


79



Melhor resposta por aí, funciona quando você é não-root (com sudo) - sudo echo > file apenas dá um erro em tais casos. - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' é como você usa as soluções Bash com o sudo. - Stuart P. Bentley
brew install truncate no os x com homebrew instalado. - xaxxon


Você poderia fazer isso:

echo -n "" > file.log

Usando > para escrever a entrada (nula) de echo -n para o arquivo.

Usando >> seria acrescentar a entrada nula para o arquivo (efetivamente fazendo nada, mas toucho mesmo).


32



Isso vai deixar um espaço lá. - dmckee
Estou recebendo este: -bash:: comando não encontrado - Andrew
echo ""> ainda lhe dará um arquivo com um caractere (uma nova linha). Se você quiser usar echo, use "echo -n> file.log" para echo null. - Dave Forgac
Seria melhor usar um comando dedicado de saída nula como true (ou o seu alias incorporado :), embora no final você não precise de um comando (veja a resposta aceita). - Stuart P. Bentley
funcionando bem com o Mac, obrigado - AMIC MING


: > file.log

Igual a > filename no Bash, mas funciona em mais shells (crédito). Redireciona a saída do true builtin (que não tem saída) para filename.


22



Eu vim para fazer esta resposta, mas, infelizmente, já está aqui ... Tome um upvote. - Aaron Hall
Apenas faça :> filename. Não parece um smiley? :> - minmaxavg


ZSH

>! filename

O ZSH protegerá os usuários contra a invasão de arquivos usando o operador de redirecionamento io >. Se você usar >! você pode forçar o truncamento de um arquivo existente.

Se você quiser que o ZSH use o comportamento de redirecionamento do Bash, se não houver proteção contra a invasão de arquivos, será necessário definir o clobber opção para o seu shell.

Mais informações: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9





Se você quiser fazer de dentro de um editor vim na linha de comando, você pode tentar isto:

vim file.txt 

pressione Esc.

:1,$d

pressione Entrar.

Você encontrará todas as linhas excluídas.


7



Esta é a única coisa que funcionou para o meu maillog, até sudo > /var/log/maillog não limparia (permissão negada) - bobobobo
@bobobobo Não funciona como sudo > /var/log/maillog significa - execute sudo e coloque sua saída no arquivo. Obviamente, coloca a saída com permissões de usuário atuais. Coisa mais fácil fazer sudo su para iniciar shell de raiz e, em seguida, fazer > /var/log/maillog. - kan


$ rm file.log; touch file.log

ou

$ cat > file.log

Seguido por control-d.

ou ... ou ... ou ...

Ah Aqui está uma única versão de comando:

$ dd if=/dev/null of=file.log

4



Sugestão de Thechickenmoo de echo "" > file.log é melhor que o cat opção que você mostra, nesta situação, há outros onde cat é mais apropriado. ambos usam o mesmo redirecionamento de shell para fazer o trabalho pesado. - quack quixote
Você não precisa executar o comando cat. Apenas "> arquivo.log" irá fazê-lo. - camh
Remover o arquivo irá redefinir a data de criação. - Matteo
Remover o arquivo fará com que os programas que assistem a esse arquivo percam seu ponteiro para ele (isto é, ele terá um novo endereço no sistema de arquivos). De um modo geral, sim rm vai realizar a tarefa de produzir um arquivo vazio com o mesmo nome. Mas não vai ser certo para cada caso de uso. - robert