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?
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.
Une autre option pourrait être:
echo -n > filename
Depuis la page de manuel de echo
:
-n Do not print the trailing newline character.
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.