Je connais trois méthodes pour supprimer toutes les entrées d'un fichier.
Ils sont
>filename
touch filename
filename < /dev/null
De ces trois j'abuse de >filename
le plus car cela nécessite le moins de frappes.
Cependant, j'aimerais 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 le contenu ?
Modifier :comme indiqué dans cette réponse, cela ne le fait pas effacez le fichier !
Réponse acceptée :
En fait, la deuxième forme 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 filename avec /dev/null
comme entrée.
cp /dev/null filename
fonctionne.
Quant à efficace, le plus efficace serait truncate -s 0 filename
(voir ici).
Sinon, cp /dev/null filename
ou > filename
sont bien tous les deux. Ils ouvrent et ferment tous les deux le fichier, en utilisant le paramètre tronquer à l'ouverture. cp
ouvre également /dev/null
, ce qui le rend légèrement plus lent.
Par contre, truncate
serait probablement plus lent que > filename
lorsqu'il est exécuté à partir d'un script, car l'exécution de la commande truncate nécessite que le système ouvre l'exécutable, le charge, puis l'exécute.