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?
En bash, juste
> filename
ça ira.
Cela vous laissera avec un fichier vide nom du fichier .
p.s.
Si vous avez besoin d’un appel Sudo
, pensez à utiliser truncate
comme a répondu ici .
Vous pouvez utiliser la commande utilisateur: tronquer
truncate -s 0 test.txt
("-s 0" pour spécifier la taille)
Vous pourriez faire ceci:
echo -n "" > file.log
Utilisation de >
pour écrire l'entrée (null) de echo -n
dans le fichier.
Utiliser >>
serait ajoutera l'entrée nulle dans le fichier (en ne faisant que touch
ing).
: > file.log
Identique à > filename
dans Bash, mais fonctionne dans plus de coques (crédit) . Redirige la sortie de la variable true
(qui n'a pas de sortie) vers filename
.
ZSH
>! filename
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'option clobber
pour votre shell.
Plus d'infos: http://zsh.sourceforge.net/Doc/Release/Redirection.html
SI vous voulez le faire depuis la ligne de commande d'un éditeur vim, essayez ceci:
vim file.txt
Presse Esc.
:1,$d
Presse Enter.
Vous trouverez toutes les lignes supprimées.
$ rm file.log; touch file.log
ou
$ cat > file.log
suivi de control-d
.
ou ... ou ... ou ...
Ah Voici une version à commande unique:
$ dd if=/dev/null of=file.log
La commande ci-dessous devrait également fonctionner:
cat /dev/null > file.log
Si vous avez besoin de privilèges de superutilisateur pour accéder au fichier, alors la réponse acceptée ne fonctionnera pas. En utilisant cela fonctionne:
truncate -s0 file
ou explicitement avec Sudo:
Sudo truncate -s0 file
Plus d'infos ici http://www.commandlinefu.com/commands/view/12/empty-a-file
Si vous avez des espaces dans les noms de fichiers, utilisez:
for file in /path/to/file/*; do > "$file"; done
(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.)
Peu d'alternatives:
ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
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).
De plus, si vous avez plusieurs fichiers, vous pouvez utiliser les éléments suivants:
for file in /path/to/file/*; do > $file; done
Ceci est utile pour les fichiers journaux dans le même répertoire.
Avec mes autorisations, c'est la seule chose qui a fonctionné:
touch temp.txt
Sudo mv temp.txt original-file.txt