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

Come cancellare il contenuto di un file dalla riga di comando?

Ho un file di log che contiene un mucchio di roba che non mi serve più. Voglio cancellare il contenuto.

So come stampare il contenuto sullo schermo:

cat file.log

So come modificare il file, riga per riga:

nano file.log
``` &001 


Ma non voglio cancellare ogni riga una alla volta. C'è un modo per farlo con un solo comando senza distruggere il file per farlo?

Risposte (14)

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

In bash, solo

> filename

andrà bene.

Questo vi lascerà con un file vuoto nome del file.

p.s.

Se avete bisogno di sudo chiamate, si prega di considerare di utilizzare truncate come rispondete qui .

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

È possibile utilizzare il comando utente : troncare

truncate -s 0 test.txt

(“-s 0” per specificare la dimensione) http://www.commandlinefu.com/commands/view/12/empty-a-file

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

Si potrebbe fare così:

echo -n "" > file.log
``` &001 


Usando `>` per scrivere l'input (nullo) da `echo -n` al file. 


Usando `>>` si _appenderebbe_ l'input nullo al file (in realtà non facendo altro che `touch`).
30
30
30
2014-07-25 22:51:07 +0000
: > file.log

Come > filename in Bash, ma funziona in più gusci (credito) . Reindirizza l'uscita dal true costruito (che non ha un'uscita) a filename.

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

ZSH

>! filename
``` &001 


ZSH proteggerà gli utenti dall'intasamento dei file utilizzando l'operatore io redirect `>`. Se si utilizza `>!` è possibile forzare il troncamento di un file esistente. 


Se si desidera che ZSH utilizzi il comportamento di reindirizzamento di Bash, se non c'è protezione dall'intasamento dei file, allora è necessario impostare l'opzione `clobber` per la shell. 


Ulteriori informazioni: [ http://zsh.sourceforge.net/Doc/Release/Redirection.html ](http://zsh.sourceforge.net/Doc/Release/Redirection.html)
9
9
9
2012-09-12 18:21:28 +0000

Se volete farlo dall'interno di un editor vim nella riga di comando, potete provare questo:

vim file.txt

Press Esc.

:1,$d
``` &001 


Press Enter. 


Troverete tutte le righe cancellate.
4
4
4
2016-05-10 12:45:57 +0000

Il comando sottostante dovrebbe funzionare anche :

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

o

$ cat > file.log

seguito da control-d.

o…o…o…o…

Ah. Ecco una versione a comando singolo:

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

Se avete bisogno di sudo to superuser privilege per accedere al file, allora la risposta accettata non funzionerà. Usando questo funziona:

truncate -s0 file
``` ```
sudo truncate -s0 file

o esplicitamente con sudo:

&001 &001

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

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

Se avete spazi nei nomi dei file, usate:

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

(non ho potuto includerlo nei commenti alla risposta precedente perché non ho una reputazione di 50. A volte le limitazioni sono controproducenti).

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

Poche alternative:

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

Inoltre, se si dispone di più file è possibile utilizzare i seguenti:

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

Questo è utile per i file di log nella stessa directory.

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

Una riga alla volta?

Prova vi(m), l'adorabile editor di testo che può fare di tutto. In questo caso, navigate verso una riga, premete d (per cancellare) e d di nuovo (per la riga).

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

Con le mie autorizzazioni questa è l'unica cosa che ha funzionato:

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