351 votes

Ecrire dans le fichier, mais l'écraser s'il existe déjà

echo "text" >> 'Users/Name/Desktop/TheAccount.txt'

Comment faire pour qu'il crée le fichier s'il n'existe pas, mais l'écrase s'il existe déjà. Actuellement, ce script ne fait qu'ajouter.

552voto

Nylon Smile Points 2364

Le site >> ajoutera des lignes à la fin du fichier spécifié, alors que l'opérateur de redirection plus grand que > videra et écrasera le fichier.

echo "text" > 'Users/Name/Desktop/TheAccount.txt'

18 votes

Certains environnements refusent avec quelque chose comme -bash: TheAccount.txt: cannot overwrite existing file .

47 votes

Voir la réponse de @BrDaHa. Utilisez >| pour forcer l'écrasement des données existantes

0 votes

Si votre environnement ne le permet pas. Il fonctionne sur Ubuntu 20.10 avec bash 5.

142voto

BrDaHa Points 315

Dans Bash, si vous avez défini noclobber a la set -o noclobber alors vous utilisez la syntaxe >|

Par exemple :

echo "some text" >| existing_file

Cela fonctionne également si le fichier n'existe pas encore.


  • Vérifier si noclobber est défini avec : set -o | grep noclobber

  • Pour une explication plus détaillée sur ce type spécial d'opérateur, voir ce poste

  • Pour une liste plus exhaustive des opérateurs de redirection, consultez le document suivant ce poste

40voto

alex gray Points 5089

Malgré NylonSmile Réponse de la Commission ce qui est "en quelque sorte" correct J'ai été incapable de écraser les fichiers, de cette manière..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

pour résoudre mes problèmes... J'ai dû utiliser... >! , à la ..

[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"

Évidemment, il faut faire attention avec ça...

29 votes

Cela signifie que vous disposez de l'option zsh non par défaut NOCLOBBER set. Utilisez setopt clobber pour rétablir le comportement par défaut.

19voto

computerist Points 663

Si votre environnement ne permet pas l'écrasement avec > utiliser le tuyau | y tee à la place comme suit :

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'

Notez que cela s'imprimera également sur la sortie standard. Au cas où cela ne serait pas souhaité, vous pouvez rediriger la sortie vers /dev/null comme suit :

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null

5voto

#!/bin/bash

cat <<EOF > SampleFile

Put Some text here 
Put some text here
Put some text here

EOF

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X