Question Comment effacer le contenu d'un fichier à partir de la ligne de commande?


J'ai un fichier journal qui contient beaucoup 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 éditer le fichier, ligne par ligne:

nano file.log

Mais je ne veux pas supprimer chaque ligne une par une. Est-il possible de le faire en une seule commande sans détruire le fichier pour le faire?


227
2018-01-01 01:50


origine




Réponses:


En bash, juste

> filename

ça ira.

Cela vous laissera un fichier vide nom de fichier.

p.s.

Si tu as besoin sudo appel, s'il vous plaît envisager d'utiliser truncate comme répondu ici.


389
2018-01-01 10:20



C'est probablement la commande la plus radicale de l'histoire de l'informatique - blarg
Au contraire, @ Arekkusandaa.Irujasukin; il fonctionne très bien dans n'importe quelle version de Windows, du moment que, comme mentionné, vous utilisez bash comme votre coquille et non pas e. g. cmd.exe ou PowerShell, ni l'un ni l'autre ne sont assez POSIX pour s'attendre à gérer de telles choses. - DopeGhoti


Vous pouvez utiliser la commande user: truncate

truncate -s 0 test.txt

("-s 0" pour spécifier la taille)

http://www.commandlinefu.com/commands/view/12/empty-a-file


79
2017-08-20 14:21



Meilleure réponse, fonctionne lorsque vous n'êtes pas root (avec sudo) - sudo echo > file donne juste une erreur dans de tels cas. - Dmitry Verkhoturov
@ DmitryVerkhoturov: sudo bash -c '> filename' est la façon dont vous utilisez les solutions Bash avec sudo. - Stuart P. Bentley
brew install truncate sur os x avec homebrew installé. - xaxxon


Vous pourriez faire ceci:

echo -n "" > file.log

En utilisant > pour écrire l'entrée (null) de echo -n dans le fichier.

En utilisant >> aurait ajouter l'entrée null dans le fichier (ne fait rien d'autre que touchle).


32
2018-01-01 01:55



Cela laissera un espace là-dedans. - dmckee
Je reçois ceci: -bash:: commande introuvable - Andrew
echo ""> va toujours vous donner un fichier avec un caractère (une nouvelle ligne.) Si vous voulez utiliser echo, utilisez "echo -n> fichier.log" pour echo null. - Dave Forgac
Il serait préférable d'utiliser une commande null-output dédiée comme true (ou son alias intégré :), bien qu’au final, vous n’ayez absolument pas besoin de commande (voir la réponse acceptée). - Stuart P. Bentley
fonctionne bien avec Mac, merci - AMIC MING


: > file.log

Pareil que > filename dans Bash, mais travaille dans plus de coquillages (crédit). Redirige la sortie du true Builtin (qui n'a pas de sortie) à filename.


22
2017-07-25 22:51



Je suis venu pour faire cette réponse, mais hélas c'est déjà là ... Prenez un vote. - Aaron Hall
Juste faire :> filename. Cela ne ressemble-t-il pas à un smiley? :> - minmaxavg


ZSH

>! filename

ZSH protègera les utilisateurs contre la corruption de fichiers en utilisant l'opérateur de redirection io >. Si tu utilises >! 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’incrustation des fichiers, vous devez définir le clobber option pour votre coque.

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


9
2017-12-06 20:48





Si vous voulez faire depuis un éditeur vim en ligne de commande, vous pouvez essayer ceci:

vim file.txt 

presse Esc.

:1,$d

presse Entrer.

Vous trouverez toutes les lignes supprimées.


7
2017-09-12 18:21



C'est la seule chose qui a fonctionné pour mon maillogmême sudo > /var/log/maillog ne serait pas effacer (permission refusée) - bobobobo
@bobobobo Cela ne fonctionne pas comme sudo > /var/log/maillog signifie - exécuter sudo, et mettre sa sortie dans le fichier. De toute évidence, il place la sortie avec les autorisations utilisateur actuelles. Chose facile sudo su pour démarrer le shell racine et ensuite faire > /var/log/maillog. - kan


$ rm file.log; touch file.log

ou

$ cat > file.log

suivi par control-d.

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

Ah! Voici une version de commande unique:

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

4
2018-01-01 01:59



La suggestion de Thechickenmoo de echo "" > file.log est meilleur que le cat option que vous montrez, dans cette situation, il y a d'autres où cat est plus approprié. les deux utilisent la même redirection de shell pour faire le gros du travail. - quack quixote
Vous n'avez pas besoin de lancer la commande cat. Juste "> fichier.log" le fera. - camh
La suppression du fichier réinitialisera la date de création. - Matteo
En supprimant le fichier, les programmes qui regardent ce fichier perdent leur pointeur (c’est-à-dire qu’il aura une nouvelle adresse dans le système de fichiers). De manière générale, oui rm accomplira la tâche de produire un fichier vide avec le même nom. Mais ce ne sera pas juste pour tous les cas d'utilisation. - robert