2010-01-01 01:50:57 +0000 2010-01-01 01:50:57 +0000
297
297

Como limpar o conteúdo de um ficheiro da linha de comando?

Tenho um ficheiro de registo que tem um monte de coisas nele que já não preciso. Eu quero limpar o conteúdo.

Eu sei como imprimir o conteúdo para o ecrã:

cat file.log

Eu sei como editar o ficheiro, linha a linha:

nano file.log

Mas não quero apagar cada linha, uma de cada vez. Existe uma forma de o fazer num único comando sem destruir o ficheiro para o fazer?

Respostas (14)

488
488
488
2010-01-01 10:20:23 +0000

Em bash, apenas

> filename

serve.

Isto irá deixá-lo com um ficheiro vazio filename.

p.s.

Se precisar de sudo ligue, por favor considere usar truncate como respondido aqui .

133
133
133
2013-08-20 14:21:43 +0000

Pode utilizar o comando de utilizador : truncado

truncate -s 0 test.txt

(“-s 0” para especificar o tamanho) http://www.commandlinefu.com/commands/view/12/empty-a-file

35
35
35
2010-01-01 01:55:01 +0000

Pode fazer isto:

echo -n "" > file.log

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

Usando >> appenderia a entrada nula para o ficheiro (efectivamente não fazendo nada mais que touch fazendo-o).

30
30
30
2014-07-25 22:51:07 +0000
: > file.log

O mesmo que > filename em Bash, mas funciona em mais conchas (crédito) . Redirecciona a produção do edifício true (que não tem produção) para filename.

11
11
11
2012-12-06 20:48:34 +0000

ZSH

>! filename

ZSH protegerá os utilizadores contra a desorganização de ficheiros utilizando o operador de redireccionamento io >. Se utiliza o >! pode forçar a truncagem de um ficheiro existente.

Se pretende que o ZSH utilize o comportamento de redireccionamento do Bash, caso não exista protecção contra a sobreposição de ficheiros, então necessita de definir a opção clobber para a sua shell.

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

9
9
9
2012-09-12 18:21:28 +0000

Se quiser fazer a partir de dentro de um editor vim em linha de comando, pode tentar isto:

vim file.txt

Prima Esc.

:1,$d

Prima Enter.

Encontrará todas as linhas apagadas.

4
4
4
2016-05-10 12:45:57 +0000

Abaixo do comando também deve funcionar :

cat /dev/null > file.log
4
4
4
2010-01-01 01:59:43 +0000
$ rm file.log; touch file.log

ou

$ cat > file.log

seguido de control-d.

ou…ou…ou…

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

$ dd if=/dev/null of=file.log
2
2
2
2015-01-30 19:11:35 +0000

Se precisar de recorrer ao privilégio de superutilizador para aceder ao ficheiro, então a resposta aceite não funcionará. Usando isto funciona:

truncate -s0 file

ou explicitamente com o sudo:

sudo truncate -s0 file

Mais informações aqui http://www.commandlinefu.com/commands/view/12/empty-a-file

1
1
1
2018-03-15 09:36:54 +0000

Se tiver espaços em nomes de arquivo, use:

for file in /path/to/file/*; do > "$file"; done

(não pude incluí-lo nos comentários à resposta anterior porque não tenho 50 reputação. Por vezes as limitações são contraproducentes).

1
1
1
2015-10-25 22:27:56 +0000

Poucas alternativas:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
0
0
0
2016-06-22 16:35:06 +0000

Além disso, se tiver vários ficheiros pode utilizar os seguintes:

for file in /path/to/file/*; do > $file; done

Isto é útil para registar ficheiros no mesmo directório.

0
0
0
2010-01-01 03:14:40 +0000

Uma linha de cada vez?

Experimente vi(m), o adorável editor de texto que pode fazer qualquer coisa. Neste caso, navegue para uma linha, prima d (para apagar), e d novamente (para linha).

0
0
0
2014-03-04 00:10:08 +0000

Com as minhas permissões esta é a única coisa que funcionou:

touch temp.txt
sudo mv temp.txt original-file.txt