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 ?

17voto

Brian Wigginton Points 241

ZSH

>! filename

ZSH protégera les utilisateurs contre le détournement de fichiers en utilisant l'opérateur de redirection io. > . Si vous utilisez >! vous pouvez forcer la troncature d'un fichier existant.

Si vous souhaitez que ZSH utilise le comportement de redirection de Bash, où il n'y a pas de protection contre le détournement de fichiers, vous devez définir l'attribut clobber pour votre Shell.

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

13voto

MarkPowell Points 11394

Si vous voulez le faire à partir 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.

0 votes

C'est la seule chose qui a fonctionné pour mon maillog même sudo > /var/log/maillog n'a pas voulu l'effacer (permission refusée)

2 votes

@bobobobo Cela ne fonctionne pas comme sudo > /var/log/maillog signifie - exécuter sudo, et mettre sa sortie dans le fichier. Évidemment, il met la sortie avec les permissions de l'utilisateur actuel. Une chose plus facile à faire sudo su pour démarrer root Shell et ensuite faire > /var/log/maillog .

8voto

timeSmith Points 290

Si vous devez obtenir le privilège sudo ou superuser pour accéder au fichier, la réponse acceptée ne fonctionnera pas. L'utilisation de cette réponse 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

7voto

spong Points 875
$ rm file.log; touch file.log

または

$ cat > file.log

suivi par control-d .

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

Ah. Voici une version à commande unique :

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

3 votes

La suggestion de Thechickenmoo de echo "" > file.log est meilleur que le cat l'option que vous montrez, dans cette situation, mais il y en a d'autres dans lesquelles cat est plus approprié. Les deux utilisent la même redirection Shell pour faire le gros du travail.

2 votes

Vous n'avez pas besoin d'exécuter la commande cat. Juste "> file.log" le fera.

1 votes

La suppression du fichier réinitialisera la date de création.

3voto

apena Points 171

Cela peut être fait en utilisant sed

sed -i d filename

0 votes

+1. et vous pouvez aussi faire avec awk mais cela sera trop lent pour les gros fichiers.

0 votes

@Cuauhtli, pourquoi serait-il lent ?

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