web-dev-qa-db-fra.com

Comment effacer le contenu d'un fichier de la ligne de commande?

J'ai un fichier journal qui contient un tas de choses dont je n'ai plus besoin. Je veux effacer le contenu.

Je sais comment imprimer le contenu à l'écran:

cat file.log

Je sais comment éditer le fichier, ligne par ligne:

nano file.log

Mais je ne veux pas supprimer chaque ligne une à la fois. Existe-t-il un moyen de le faire en une seule commande sans détruire le fichier?

264
Andrew

En bash, juste

> filename

ça ira.

Cela vous laissera avec un fichier vide nom du fichier .

p.s.

Si vous avez besoin d’un appel Sudo, pensez à utiliser truncate comme a répondu ici .

440
geek

Vous pouvez utiliser la commande utilisateur: tronquer

truncate -s 0 test.txt

("-s 0" pour spécifier la taille)

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

109
nono

Vous pourriez faire ceci:

echo -n "" > file.log

Utilisation de > pour écrire l'entrée (null) de echo -n dans le fichier.

Utiliser >> serait ajoutera l'entrée nulle dans le fichier (en ne faisant que touching).

34
Thechickenmoo
: > file.log

Identique à > filename dans Bash, mais fonctionne dans plus de coques (crédit) . Redirige la sortie de la variable true (qui n'a pas de sortie) vers filename.

23
Stuart P. Bentley

ZSH

>! filename

ZSH empêchera les utilisateurs d'empiler des fichiers à l'aide de l'opérateur de redirection io >. Si vous utilisez >!, vous pouvez forcer la troncature d'un fichier existant.

Si vous voulez que ZSH utilise le comportement de redirection de Bash, s'il n'y a pas de protection contre l'engorgement des fichiers, vous devez définir l'option clobber pour votre shell.

Plus d'infos: http://zsh.sourceforge.net/Doc/Release/Redirection.html

9
Brian Wigginton

SI vous voulez le faire depuis la ligne de commande d'un éditeur vim, essayez ceci:

vim file.txt 

Presse Esc.

:1,$d

Presse Enter.

Vous trouverez toutes les lignes supprimées.

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

ou

$ cat > file.log

suivi de control-d.

ou ... ou ... ou ...

Ah Voici une version à commande unique:

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

La commande ci-dessous devrait également fonctionner:

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

Si vous avez besoin de privilèges de superutilisateur pour accéder au fichier, alors la réponse acceptée ne fonctionnera pas. En utilisant cela fonctionne:

truncate -s0 file

ou explicitement avec Sudo:

Sudo truncate -s0 file

Plus d'infos ici http://www.commandlinefu.com/commands/view/12/empty-a-file

2
timeSmith

Si vous avez des espaces dans les noms de fichiers, utilisez:

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

(Je ne pouvais pas l'inclure dans les commentaires de la réponse précédente parce que je n'ai pas 50 ans de réputation. Parfois, les limitations sont contre-productives.)

1
d491049

Peu d'alternatives:

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

Une ligne à la fois?

Essayez vi (m), le charmant éditeur de texte qui peut tout faire. Dans ce cas, accédez à une ligne, appuyez sur d (pour supprimer), puis à nouveau sur d (pour ligne).

0
Phoshi

De plus, si vous avez plusieurs fichiers, vous pouvez utiliser les éléments suivants:

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

Ceci est utile pour les fichiers journaux dans le même répertoire.

0
DomainsFeatured

Avec mes autorisations, c'est la seule chose qui a fonctionné:

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