it-swarm.dev

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

Ho un file di registro che contiene un sacco di cose che non mi servono più. Voglio cancellare il contenuto.

So come stampare i contenuti sullo schermo:

cat file.log

So come modificare il file, riga per riga:

nano file.log

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

264
Andrew

In bash, giusto

> filename

andrà bene.

Questo ti lascerà un file vuoto filename .

post scriptum.

Se hai bisogno della chiamata Sudo, ti preghiamo di prendere in considerazione l'uso di truncate come ha risposto qui .

440
geek

È 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

109
nono

Potresti fare questo:

echo -n "" > file.log

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

L'uso di >> dovrebbe aggiungere l'input nullo al file (in pratica non fa altro che touching it).

34
Thechickenmoo
: > file.log

Lo stesso di > filename in Bash, ma funziona in più shell (credito) . Reindirizza l'output dal true builtin (che non ha output) a filename.

23

ZSH

>! filename

ZSH proteggerà gli utenti dai file di bocciatura usando l'operatore reindirizzamento >. Se usi >! puoi forzare il troncamento di un file esistente.

Se si desidera che ZSH utilizzi il comportamento di reindirizzamento di Bash, se non vi è alcuna protezione dal clobbering dei file, è necessario impostare l'opzione clobber per Shell.

Ulteriori informazioni: http://zsh.sourceforge.net/Doc/Release/Redirection.html

9
Brian Wigginton

Se vuoi fare da dentro un editor di Vim in linea di comando, puoi provare questo:

vim file.txt 

Stampa Esc.

:1,$d

Stampa Enter.

Troverai tutte le righe cancellate.

8
soum
$ rm file.log; touch file.log

o

$ cat > file.log

seguito da control-d.

o ... o ... o ...

Ah. Ecco una versione a comando singolo:

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

Sotto il comando dovrebbe funzionare anche:

cat /dev/null > file.log
4
paarth batra

Se hai bisogno di Sudo per privilegiare il superutente per accedere al file, la risposta accettata non funzionerà. Usando questo funziona:

truncate -s0 file

o esplicitamente con Sudo:

Sudo truncate -s0 file

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

2
timeSmith

Se hai spazi nei nomi di file, usa:

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

(Non potevo includerlo nei commenti alla risposta precedente perché non ho 50 reputazione, a volte i limiti sono controproducenti).

1
d491049

Poche alternative:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
1
kenorb

Una riga alla volta?

Prova vi (m), l'adorabile editor di testi che può fare qualsiasi cosa. In questo caso, navigare fino a una linea, premere d (per eliminare) e ancora d (per la linea).

0
Phoshi

Inoltre, se disponi di più file, puoi utilizzare quanto segue:

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

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

0
DomainsFeatured

Con i miei permessi questa è l'unica cosa che ha funzionato:

touch temp.txt
Sudo mv temp.txt original-file.txt
0
Morgan