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

Hoe verwijder ik de inhoud van een bestand van de opdrachtregel?

Ik heb een logbestand dat een heleboel dingen bevat die ik niet meer nodig heb. Ik wil de inhoud wissen.

Ik weet hoe ik de inhoud naar het scherm moet afdrukken:

cat file.log

Ik weet hoe ik het bestand moet bewerken, regel voor regel:

nano file.log

Maar ik wil niet elke regel één voor één wissen. Is er een manier om het in één opdracht te doen zonder het bestand te vernietigen?

Antwoorden (14)

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

In bash, alleen

> filename

doen we.

Dit laat u achter met een leeg bestand filenaam.

p.s.

Als u sudo nodig hebt, overweeg dan om truncate te gebruiken zoals hier geantwoord .

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

U kunt de gebruikersopdracht gebruiken: truncate

truncate -s 0 test.txt

(“-s 0” om de grootte op te geven) http://www.commandlinefu.com/commands/view/12/empty-a-file

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

Je zou dit kunnen doen: echo -n "" > file.log

met behulp van > om de (null) input van echo -n in het bestand te schrijven.

met behulp van >> zou append de null input in het bestand doen (in feite niets anders dan touching).

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

Zelfde als > filename in Bash, maar werkt in meer schelpen (credit) . Leidt de uitvoer van de ingebouwde true (die geen uitvoer heeft) om naar filename.

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

ZSH

>! filename

ZSH zal gebruikers beschermen tegen het gebruik van de io redirect operator >. Als je >! gebruikt kan je de truncatie van een bestaand bestand forceren.

Als je wilt dat ZSH het omleidingsgedrag van Bash gebruikt, waar er geen bescherming is tegen het plakken van bestanden, dan moet je de clobber optie voor je shell instellen.

Meer informatie: http://zsh.sourceforge.net/Doc/Release/Redirection.html

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

Als u wilt doen vanuit een vim editor in opdrachtregel, kunt u dit proberen:

vim file.txt

Druk op Esc.

:1,$d

Druk op Enter.

U zult alle regels verwijderd vinden.

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

Onderstaand commando zou ook moeten werken :

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

of

$ cat > file.log

gevolgd door control-d.

of…of…of…

Ah. Hier is een enkele opdrachtversie:

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

Als u moet sudo aan superuser privilege om toegang te krijgen tot het bestand dan zal het geaccepteerde antwoord niet werken. Dit werkt wel:

truncate -s0 file

of expliciet met sudo:

sudo truncate -s0 file

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

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

Als je spaties hebt in bestandsnamen, gebruik dan:

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

(ik kon het niet opnemen in opmerkingen bij het vorige antwoord omdat ik geen 50 reputatie heb. Soms zijn beperkingen contraproductief).

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

Weinig alternatieven:

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

Ook als u meerdere bestanden heeft kunt u het volgende gebruiken:

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

Dit is handig voor logbestanden in dezelfde map.

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

Regel voor regel?

Probeer vi(m), de mooie tekstverwerker die alles kan. Navigeer in dit geval naar een regel, druk op d (voor verwijderen), en nogmaals op d (voor regel).

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

Met mijn permissies is dit het enige dat werkte:

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