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

Wie löscht man den Inhalt einer Datei von der Kommandozeile aus?

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

Ich weiß, wie ich den Inhalt auf den Bildschirm ausgeben kann:

cat file.log

Ich weiß, wie ich die Datei Zeile für Zeile bearbeiten kann:

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?

Antworten (14)

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

In der bash reicht einfach

> filename

Damit bleibt eine leere Datei Dateiname übrig.

p.s.

Wenn Sie sudo anrufen müssen, ziehen Sie bitte in Betracht, truncate als hier beantwortet zu verwenden.

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

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

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

Sie könnten dies tun:

echo -n "" > file.log

Durch die Verwendung von > würde die (Null-)Eingabe von echo -n in die Datei geschrieben.

Durch die Verwendung von >> würde die Null-Eingabe an die Datei angehängt werden (effektiv würde nichts anderes getan, als touch zu verwenden).

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

Dasselbe wie > filename in Bash, arbeitet aber in mehr Schalen (Credit) . Leitet die Ausgabe von der eingebauten true (die keine Ausgabe hat) nach filename um.

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

ZSH

>! filename

ZSH wird die Benutzer vor dem Verstopfen von Dateien mit Hilfe des io-Umleitungsoperators > schützen. Wenn Sie >! verwenden, können Sie das Abschneiden einer vorhandenen Datei erzwingen.

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

Weitere Informationen: http://zsh.sourceforge.net/Doc/Release/Redirection.html

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

WENN Sie von innerhalb eines vim-Editors in der Kommandozeile machen wollen, können Sie dies versuchen:

vim file.txt

Drücken Sie Esc.

:1,$d

Drücken Sie Enter.

Sie werden alle Zeilen gelöscht vorfinden.

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

Der folgende Befehl sollte auch funktionieren:

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

oder

$ cat > file.log

gefolgt von control-d.

oder…oder…oder…

Ah. Hier ist eine einzelne Befehlsversion:

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

Wenn Sie für den Zugriff auf die Datei auf Superuser-Berechtigungen zurückgreifen müssen, wird die akzeptierte Antwort nicht funktionieren. Die Verwendung dieser Funktion funktioniert:

truncate -s0 file

oder explizit mit sudo:

sudo truncate -s0 file

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

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

Wenn Sie Leerzeichen in Dateinamen haben, verwenden Sie:

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

(Ich konnte es nicht in Kommentare zu früheren Antworten aufnehmen, weil ich nicht 50 Reputation habe. Manchmal sind Einschränkungen kontraproduktiv).

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

Wenige Alternativen:

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

Wenn Sie mehrere Dateien haben, können Sie auch Folgendes verwenden:

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

Dies ist hilfreich für Protokolldateien im selben Verzeichnis.

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

Eine Zeile nach der anderen?

Versuchen Sie vi(m), den wunderbaren Texteditor, der alles kann. In diesem Fall navigieren Sie zu einer Zeile, drücken Sie d (für Löschen) und dann erneut d (für Zeile).

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

Mit meiner Erlaubnis ist dies das Einzige, was funktioniert hat:

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