Frage Wie lösche ich den Inhalt einer Datei von der Kommandozeile?


Ich habe eine Protokolldatei, die eine Menge Dinge enthält, die ich nicht mehr brauche. Ich möchte den Inhalt löschen.

Ich weiß, wie man den Inhalt auf den Bildschirm druckt:

cat file.log

Ich kann die Datei Zeile für Zeile bearbeiten:

nano file.log

Aber ich möchte nicht jede Zeile einzeln löschen. Gibt es eine Möglichkeit, dies in einem Befehl zu tun, ohne die Datei dafür zu zerstören?


227
2018-01-01 01:50


Ursprung




Antworten:


In bash, einfach

> filename

Wird besorgt.

Dies wird Sie mit einer leeren Datei verlassen Dateiname.

p.s.

Wenn Sie brauchen sudo Anruf, bitte beachten Sie zu verwenden truncate wie antwortete hier.


389
2018-01-01 10:20



Dies ist wahrscheinlich das radikalste Kommando in der Computergeschichte - blarg
Im Gegenteil, @ Arekkusandaa.Irujasukin; Es funktioniert problemlos in jeder Version von Windows, solange Sie, wie bereits erwähnt, verwenden bash als deine Schale und nicht e. G. cmd.exe oder PowerShell, von denen keine POSIXy genug ist, um mit solchen Dingen umzugehen. - DopeGhoti


Sie können den Benutzerbefehl verwenden: truncate

truncate -s 0 test.txt

("-s 0" zur Angabe der Größe)

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


79
2017-08-20 14:21



Beste Antwort, funktioniert, wenn Sie nicht root sind (mit sudo) - sudo echo > file gibt nur einen Fehler in solchen Fällen. - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' ist, wie Sie die Bash-Lösungen mit Sudo verwenden. - Stuart P. Bentley
brew install truncate auf os x mit Homebrew installiert. - xaxxon


Du könntest das tun:

echo -n "" > file.log

Verwenden > um die (Null-) Eingabe von zu schreiben echo -n zu der Datei.

Verwenden >> würde anhängen die Nulleingabe in die Datei (effektiv nichts tun, aber touches).


32
2018-01-01 01:55



Dies wird einen Raum darin hinterlassen. - dmckee
Ich bekomme das: -bash:: Befehl nicht gefunden - Andrew
echo ""> gibt Ihnen immer noch eine Datei mit einem Zeichen (einem Zeilenumbruch). Wenn Sie ein Echo verwenden möchten, verwenden Sie "echo -n> file.log", um ein Echo zu erzeugen. - Dave Forgac
Es wäre besser, einen dedizierten Null-Ausgabe-Befehl wie zu verwenden true(oder sein eingebauter Alias :), obwohl Sie letztendlich keinen Befehl benötigen (siehe die angenommene Antwort). - Stuart P. Bentley
funktioniert gut mit Mac, danke - AMIC MING


: > file.log

Gleich wie > filename in Bash, aber arbeitet in mehreren Shells (Kredit). Leitet die Ausgabe von der true Built-in (die keine Ausgabe hat) zu filename.


22
2017-07-25 22:51



Ich bin gekommen, um diese Antwort zu geben, aber ach, es ist schon da ... Nimm eine Verbesserung. - Aaron Hall
Mach einfach :> filename. Sieht es nicht wie ein Smiley aus? :> - minmaxavg


ZSH

>! filename

ZSH schützt Benutzer mit dem io redirect-Operator vor Clobber-Dateien >. Wenn du benutzt >! Sie können das Abschneiden einer vorhandenen Datei erzwingen.

Wenn Sie möchten, dass ZSH das Umleitungsverhalten von Bash verwendet, wenn es keinen Schutz vor Datei-Clobbering gibt, dann müssen Sie den clobber Option für Ihre Shell.

Mehr Info: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





Wenn Sie in einem vim-Editor in der Befehlszeile ausführen möchten, können Sie Folgendes versuchen:

vim file.txt 

Drücken Sie Esc.

:1,$d

Drücken Sie Eingeben.

Sie werden alle Zeilen gelöscht finden.


7
2017-09-12 18:21



Dies ist das einzige, was für mich funktioniert hat maillog, sogar sudo > /var/log/maillog würde es nicht löschen (Berechtigung verweigert) - bobobobo
@bobobobo Es funktioniert nicht als sudo > /var/log/maillog bedeutet - sudo ausführen und seine Ausgabe in die Datei einfügen. Offensichtlich setzt es die Ausgabe mit aktuellen Benutzerrechten. Einfachere Sache sudo su um die root-Shell zu starten und dann zu tun > /var/log/maillog. - kan


$ rm file.log; touch file.log

oder

$ cat > file.log

gefolgt von control-d.

oder ... oder ... oder ...

Ah. Hier ist eine einzige Befehlsversion:

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

4
2018-01-01 01:59



Thechickenmoos Vorschlag von echo "" > file.log ist besser als die cat Option, die Sie zeigen, in dieser Situation gibt es andere wo cat ist angemessener. Beide verwenden dieselbe Shell-Umleitung, um das schwere Heben auszuführen. - quack quixote
Sie müssen den Befehl cat nicht ausführen. Nur "> file.log" wird es tun. - camh
Durch das Entfernen der Datei wird das Erstellungsdatum zurückgesetzt. - Matteo
Das Entfernen der Datei führt dazu, dass Programme, die diese Datei beobachten, ihren Zeiger darauf verlieren (d. H., Sie haben eine neue Adresse im Dateisystem). Generell ja rm wird die Aufgabe erfüllen, eine leere Datei mit demselben Namen zu erzeugen. Aber es wird nicht für jeden Anwendungsfall richtig sein. - robert


Unter Befehl sollte auch funktionieren:

cat /dev/null > file.log

4
2018-05-10 12:45





Wenn Sie die Superuser-Berechtigung für den Zugriff auf die Datei verwenden müssen, funktioniert die angenommene Antwort nicht. Die Benutzung funktioniert:

truncate -s0 file

oder explizit mit sudo:

sudo truncate -s0 file

Mehr Infos hier http://www.commandlinefu.com/commands/view/12/empty-a-file


1
2018-01-30 19:11