J'ai un fichier journal qui contient un tas 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 à la fois. Existe-t-il un moyen de le faire en une seule commande sans détruire le fichier?
linux
command-line
Andrew
la source
la source
bash
comme shell et non par exemplecmd.exe
, ni PowerShell, aucun d’eux n’étant assez POSIX pour être supposé gérer de telles choses.Vous pouvez utiliser la commande utilisateur: tronquer
("-s 0" pour spécifier la taille)
http://www.commandlinefu.com/commands/view/12/empty-a-file
la source
sudo echo > file
donne simplement une erreur dans de tels cas.sudo bash -c '> filename'
comment vous utilisez les solutions Bash avec sudo.brew install truncate
sur os x avec homebrew installé.Vous pourriez faire ceci:
Utiliser
>
pour écrire l’entrée (null)echo -n
du fichier.Utiliser ajouterait l'entrée nulle au fichier (en réalité, il ne
>>
ferait que l' incluretouch
).la source
true
(ou son alias intégré:
), bien qu’au final vous n’ayez pas besoin de commande (voir la réponse acceptée).sudo
.Identique
> filename
à Bash, mais fonctionne dans plus de coquillages (crédit) . Redirige la sortie de la commandetrue
intégrée (qui n'a aucune sortie) versfilename
.la source
:> filename
. Cela ne ressemble-t-il pas à un smiley? :>ZSH
ZSH empêchera les utilisateurs d'empiler des fichiers à l'aide de l'opérateur de redirection io
>
. Si vous utilisez,>!
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'engorgement des fichiers, vous devez définir l'
clobber
option pour votre shell.Plus d'infos: http://zsh.sourceforge.net/Doc/Release/Redirection.html
la source
SI vous voulez le faire depuis la ligne de commande d'un éditeur vim, essayez ceci:
Appuyez sur Esc.
Appuyez sur Enter.
Vous trouverez toutes les lignes supprimées.
la source
maillog
, mêmesudo > /var/log/maillog
ne serait pas effacer (permission refusée)sudo > /var/log/maillog
moyen - lancez sudo et mettez sa sortie dans le fichier. De toute évidence, il met la sortie avec les autorisations de l'utilisateur actuel. Il est plus facilesudo su
de démarrer shell racine puis de le faire> /var/log/maillog
.ou
suivi de
control-d
.ou ... ou ... ou ...
Ah Voici une version à commande unique:
la source
echo "" > file.log
est meilleure que l'cat
option que vous montrez, dans cette situation, bien qu'il y en ait d'autres où ilcat
est plus approprié. les deux utilisent la même redirection de shell pour effectuer le levage de charges lourdes.rm
accomplira la tâche de produire un fichier vide portant le même nom. Mais ce ne sera pas juste pour chaque cas d'utilisation.La commande ci-dessous devrait également fonctionner:
la source
Si vous avez besoin de privilèges superutilisateur pour accéder au fichier, la réponse acceptée ne fonctionnera pas. En utilisant cela fonctionne:
ou explicitement avec sudo:
Plus d'informations ici http://www.commandlinefu.com/commands/view/12/empty-a-file
la source
Peu d'alternatives:
la source
Si vous avez des espaces dans les noms de fichiers, utilisez:
(Je ne pouvais pas l'inclure dans les commentaires de la réponse précédente parce que je n'ai pas 50 ans de réputation. Parfois, les limitations sont contre-productives.)
la source
Une ligne à la fois?
Essayez vi (m), le charmant éditeur de texte qui peut tout faire. Dans ce cas, accédez à une ligne, appuyez sur d (pour supprimer), puis à nouveau sur d (pour ligne).
la source
gg
se déplace vers le haut pour que toute la séquence puisse êtreggdG
.Avec mes autorisations, c'est la seule chose qui a fonctionné:
la source
De plus, si vous avez plusieurs fichiers, vous pouvez utiliser les éléments suivants:
Ceci est utile pour les fichiers journaux dans le même répertoire.
la source
> a.txt
Identique à> nom de fichier dans Bash, mais fonctionne dans plus de coques (crédit). Redirige la sortie du véritable construit (qui n'a pas de sortie) en nom de fichier.
la source