it-swarm.com.de

Wie lösche ich den Inhalt einer Datei über die Befehlszeile?

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

Ich kann den Inhalt auf dem Bildschirm ausdrucken:

cat file.log

Ich kann die Datei Zeile für Zeile bearbeiten:

nano file.log

Ich möchte jedoch nicht jede Zeile einzeln löschen. Gibt es eine Möglichkeit, es in einem Befehl zu tun, ohne die Datei zu zerstören, um es zu tun?

264
Andrew

In Bash, nur

> filename

wird besorgt.

Dies wird Sie mit einer leeren Datei Dateiname verlassen.

p.s.

Wenn Sie einen Sudo-Aufruf benötigen, ziehen Sie bitte in Betracht, truncate als hier beantwortet zu verwenden.

440
geek

Sie können den Befehl user verwenden: truncate

truncate -s 0 test.txt

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

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

109
nono

Sie könnten dies tun:

echo -n "" > file.log

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

Die Verwendung von >> würde die NULL-Eingabe an die Datei anhängen (effektiv nichts anderes tun, als sie mit touch zu benennen).

34
Thechickenmoo
: > file.log

Entspricht > filename in Bash, funktioniert jedoch in mehreren Shells (credit) . Leitet die Ausgabe der integrierten true (die keine Ausgabe hat) zu filename um.

23

ZSH

>! filename

ZSH schützt Benutzer mit dem io-Redirect-Operator > vor Datenverlust. Wenn Sie >! verwenden, können Sie das Abschneiden einer vorhandenen Datei erzwingen.

Wenn ZSH das Umleitungsverhalten von Bash verwenden soll, müssen Sie die Option clobber für Ihre Shell festlegen, wenn kein Schutz vor Dateikollisionen besteht.

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

9
Brian Wigginton

WENN Sie dies in einem VIM-Editor in der Befehlszeile tun möchten, können Sie dies versuchen:

vim file.txt 

Drücken Sie Esc.

:1,$d

Drücken Sie Enter.

Sie finden alle Zeilen gelöscht.

8
soum
$ 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
4
dmckee

Der folgende Befehl sollte auch funktionieren:

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

Wenn Sie das Superuser-Recht für Sudo benötigen, um auf die Datei zuzugreifen, funktioniert die akzeptierte Antwort nicht. Dies funktioniert folgendermaßen:

truncate -s0 file

oder explizit mit Sudo:

Sudo truncate -s0 file

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

2
timeSmith

Wenn Sie Leerzeichen in Dateinamen haben, verwenden Sie:

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

(Ich konnte es nicht in die Kommentare zur vorherigen Antwort aufnehmen, da ich keine Reputation von 50 habe. Manchmal sind Einschränkungen kontraproduktiv.)

1
d491049

Einige Alternativen:

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

Eine Zeile nach der anderen?

Versuchen Sie vi (m), den schönen Texteditor, der alles kann. Navigieren Sie in diesem Fall zu einer Zeile, drücken Sie d (zum Löschen) und d erneut (für die Zeile).

0
Phoshi

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
DomainsFeatured

Mit meinen Berechtigungen ist dies das einzige, was funktioniert hat:

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