web-dev-qa-db-fra.com

Vider le contenu d'un fichier

Je connais trois méthodes pour supprimer toutes les entrées d'un fichier.

Elles sont

  • >filename
  • touch filename
  • filename < /dev/null

De ces trois, j'abuse >filename d'autant plus que cela nécessite le moins de frappes.

Cependant, je voudrais savoir quelle est la plus efficace des trois (s'il existe des méthodes plus efficaces) en ce qui concerne les gros fichiers journaux et les petits fichiers.

De plus, comment fonctionnent les trois codes et suppriment-ils le contenu?

230
debal

En fait, le deuxième formulaire touch filename ne supprime rien du fichier - il crée uniquement un fichier vide s'il n'en existait pas, ou met à jour la date de dernière modification d'un fichier existant.

Et le troisième filename < /dev/null essaie d'exécuter le nom de fichier avec /dev/null en entrée.

cp /dev/null filename travaux.

Quant à efficace, le plus efficace serait truncate -s 0 filename; voir ici: http://linux.die.net/man/1/truncate .

Autrement, cp /dev/null filename ou > filename vont bien. Ils ouvrent et ferment le fichier à la fois, en utilisant le paramètre tronquer à l'ouverture. cp ouvre également /dev/null, ce qui le rend légèrement plus lent.

D'un autre côté, truncate serait probablement plus lent que > filename lors de l'exécution à partir d'un script, car l'exécution de la commande truncate nécessite que le système ouvre l'exécutable, le charge et l'exécute.

305
ash

Une autre option pourrait être:

echo -n > filename

Depuis la page de manuel de echo:

-n Do not print the trailing newline character.

45
Arturo Herrero

Il existe une commande intégrée ":", qui est disponible dans sh, csh, bash et d'autres peut-être, qui peut être facilement utilisée avec l'opérateur de sortie de redirection > tronquer un fichier:

#!/usr/bin/env bash
:> filename

Ce que j'aime à ce sujet, c'est qu'il n'a pas besoin de commandes externes comme "echo", etc.

Un gros avantage de tronquer des fichiers au lieu de les supprimer/recréer est que l'exécution d'applications qui fonctionne avec ce fichier (par exemple, quelqu'un crée un tail -f filename ou un logiciel de surveillance, ...) n'ont pas besoin de le rouvrir. Ils peuvent simplement continuer à utiliser le filedescriptor et obtenir toutes les nouvelles données.

5
Mirko Steiner