508 votes

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

J'ai un fichier journal qui contient un tas d'informations dont je n'ai plus besoin. Je veux en 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 par une. Existe-t-il un moyen de le faire en une seule commande sans détruire le fichier pour le faire ?

800voto

Shaun Hess Points 504

En bash, il suffit de

> filename

fera l'affaire. Cela vous laissera avec un fichier vide nom de fichier .

PS : Si vous avez besoin sudo appel, veuillez envisager d'utiliser truncate comme répondu ici .

121 votes

C'est probablement la commande la plus radicale de l'histoire de l'informatique.

8 votes

Au contraire, @Arekkusandaa.Irujasukin ; il fonctionne très bien dans n'importe quelle version de Windows, tant que, comme mentionné, vous utilisez bash comme votre Shell et non pas par ex. cmd.exe ou PowerShell, qui ne sont pas suffisamment POSIX pour gérer de telles choses.

4 votes

Les internautes se plaignent, mais il serait peut-être plus élégant de true > filename

255voto

nono Points 2060

Vous pouvez utiliser la commande utilisateur : truncate

truncate -s 0 test.txt

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

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

6 votes

Meilleure réponse possible, fonctionne même si vous n'êtes pas root (avec sudo). sudo echo > file donne simplement une erreur dans de tels cas.

17 votes

@DmitryVerkhoturov : sudo bash -c '> filename' est la façon dont vous utilisez les solutions Bash avec sudo.

1 votes

brew install truncate sur os x avec homebrew installé.

66voto

JohnnyM Points 3483
: > file.log

Même que > filename en Bash, mais fonctionne dans plus de shells (crédit) . Redirige la sortie de l true (qui n'a pas de sortie) à filename .

1 votes

Je suis venu pour faire cette réponse, mais hélas elle est déjà là... Prenez un upvote.

21 votes

Fais-le. :> filename . Cela ne ressemble-t-il pas à un smiley ? :>

0 votes

Sur un macOS, > filename gèle. Mais : > filename travaux.

59voto

Thechickenmoo Points 579

Tu pourrais faire ça :

echo -n "" > file.log

使用方法 > pour écrire l'entrée (nulle) de echo -n dans le fichier.

使用方法 >> serait ajouter l'entrée nulle dans le fichier (ce qui ne fait rien d'autre que de touch de l'utiliser).

1 votes

Cela laissera un espace à cet endroit.

0 votes

Je reçois ça : -bash : : commande non trouvée

9 votes

Echo "" > vous donnera toujours un fichier avec un seul caractère (une nouvelle ligne). Si vous voulez utiliser echo, utilisez "echo -n > fichier.log" pour afficher null.

19voto

paarth batra Points 171

La commande ci-dessous devrait également fonctionner :

cat /dev/null > file.log

0 votes

C'est ce que j'utilise depuis de nombreuses années sans aucune erreur.

3 votes

Celle-ci devrait être la meilleure réponse compatible car truncate n'est pas intégré dans BSD comme MacOS et bash n'est pas defult Shell pour certains OS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X