web-dev-qa-db-fra.com

Écrire dans un fichier, mais l'écraser s'il existe

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

Comment puis-je le faire pour qu'il crée le fichier s'il n'existe pas, mais l'écrase s'il existe déjà. En ce moment, ce script ajoute juste.

207
switz

Un peu de compréhension sur le fonctionnement des tuyaux * nix serait utile.

En bref, l'opérateur de redirection >> ajoutera des lignes à la fin du fichier spécifié, tandis que le numéro supérieur à > videra et écrasera le fichier.

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

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

Par exemple:

echo "some text" >| existing_file

Cela fonctionne aussi si le fichier n'existe pas encore


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

  • Pour une explication plus détaillée sur ce type d'opérateur particulier, voir cet article

  • Pour une liste plus exhaustive des opérateurs de redirection, reportez-vous à this post

69
BrDaHa

Malgré la réponse de NylonSmile , ce qui est "en quelque sorte" correct. Je ne pouvais pas écraser les fichiers , en de cette manière ..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

pour résoudre mes problèmes .. je devais utiliser ... >!, á la ..

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

Évidemment, soyez prudent avec ça ...

38
Alex Gray

Si votre environnement n'autorise pas le remplacement avec >, utilisez les tubes | et tee comme suit:

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

Notez que ceci sera également imprimé sur la sortie standard. Dans le cas contraire, vous pouvez rediriger la sortie vers /dev/null comme suit:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
8
computerist
#!/bin/bash

cat <<EOF > SampleFile

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

EOF

En notant simplement que si vous souhaitez rediriger std :: cerr et std :: cout vers un fichier alors que vous avez défini noclobber (c'est-à-dire set -o noclobber), vous pouvez utiliser le code suivant:

    cmd >|file.txt 2>&1

Pour plus d'informations à ce sujet, rendez-vous sur le site https://stackoverflow.com/a/876242 .

Aussi cette réponse est la question de @ TuBui sur la réponse fournie par @BrDaHa ci-dessus au 9 août 18 à 9h34.

1
greensaxman