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

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 modifier le fichier, ligne par ligne :

nano file.log

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

Réponses (14)

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

En bash, juste

> filename

fera l'affaire.

Cela vous laissera avec un fichier vide nom de fichier.

p.s.

Si vous avez besoin de sudo call, veuillez considérer d'utiliser truncate comme répondu ici .

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

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

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

Vous pourriez faire ceci :

echo -n "" > file.log

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

Utiliser >> appliquerait l'entrée nulle au fichier (ne faisant rien d'autre que de touch).

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

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

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

ZSH

>! filename

ZSH protégera les utilisateurs contre le sabotage des fichiers en utilisant 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'obstruction de fichiers, alors vous devez définir l'option clobber pour votre shell.

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

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

Si vous voulez faire à l'intérieur d'un éditeur vim en ligne de commande, vous pouvez essayer ceci :

vim file.txt

Appuyez sur Esc.

:1,$d

Appuyez sur Enter.

Vous trouverez toutes les lignes supprimées.

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

Below command devrait également fonctionner :

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

ou

$ cat > file.log

suivi par control-d.

ou…ou…ou…

Ah. Voici une version à commande unique :

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

Si vous avez besoin du privilège “sudo to superuser” pour accéder au fichier, la réponse acceptée ne fonctionnera pas. L'utilisation de cette fonction fonctionne :

truncate -s0 file

ou explicitement avec sudo :

sudo truncate -s0 file

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

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

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

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

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

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

Peu d'alternatives :

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

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

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

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

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

Une ligne à la fois ?

Essayez vi(m), le charmant éditeur de texte qui peut tout faire. Dans ce cas, naviguez jusqu'à une ligne, appuyez sur d (pour supprimer), et d à nouveau (pour la ligne).

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

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

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