No bash, apenas
> filename
fará.
Isso deixará você com um arquivo vazio filename .
p.s.
Se você precisar de sudo
, considere usar truncate
como respondido aqui .
Eu tenho um arquivo de log que contém 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 uma por vez. Existe uma maneira de fazer isso em um comando sem destruir o arquivo para fazer isso?
No bash, apenas
> filename
fará.
Isso deixará você com um arquivo vazio filename .
p.s.
Se você precisar de sudo
, considere usar truncate
como respondido aqui .
Você pode usar o comando do usuário: truncate
truncate -s 0 test.txt
("- s 0" para especificar o tamanho)
Você pode fazer isso:
echo -n "" > file.log
Usando >
para gravar a entrada (nula) de echo -n
no arquivo.
Usar >>
iria acrescentar a entrada nula ao arquivo (efetivamente não fazendo nada além de touch
ing).
: > file.log
O mesmo que > 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
.
ZSH
>! filename
O ZSH protegerá os usuários contra a invasão de arquivos usando o operador de redirecionamento io >
. Se você usar >!
, poderá forçar o truncamento de um arquivo existente.
Se você quiser que o ZSH use o comportamento de redirecionamento do Bash, caso não haja proteção contra a invasão de arquivos, será necessário definir a opção clobber
para o seu shell.
Mais informações: link
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 Enter .
Você encontrará todas as linhas excluídas.
$ 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
Abaixo, o comando também deve funcionar:
cat /dev/null > file.log
Se você precisar fazer sudo ao privilégio de superusuário para acessar o arquivo, a resposta aceita não funcionará. Usando isso funciona:
truncate -s0 file
ou explicitamente com o sudo:
sudo truncate -s0 file
Mais informações aqui link
Uma linha de cada vez?
Experimente o vi (m), o adorável editor de texto que pode fazer qualquer coisa. Nesse caso, navegue até uma linha, pressione d (para excluir) e d novamente (para linha).
Com minhas permissões, esta é a única coisa que funcionou:
touch temp.txt
sudo mv temp.txt original-file.txt
Poucas alternativas:
ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
Além disso, se você tiver vários arquivos, poderá usar o seguinte:
for file in /path/to/file/*; do > $file; done
Isso é útil para arquivos de log no mesmo diretório.
Se você tiver espaços em nomes de arquivos, use:
for file in /path/to/file/*; do > "$file"; done
(Eu não pude incluí-lo nos comentários da resposta anterior porque eu não tenho 50 reputação. Às vezes as limitações são contraproducentes.)
Tags command-line linux