web-dev-qa-db-de.com

In Datei schreiben, aber überschreiben, falls vorhanden

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

Wie mache ich es so, dass es die Datei erstellt, wenn sie nicht existiert, aber sie überschreibt, wenn sie bereits existiert. Im Moment wird dieses Skript nur angehängt.

207
switz

Ein wenig Verständnis darüber, wie * nix Pipes funktionieren, würde helfen.

Kurz gesagt, der Umleitungsoperator >> Fügt Zeilen an das Ende der angegebenen Datei an, wobei der Wert größer als > Die Datei leer macht und überschreibt.

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

Wenn Sie in Bash noclobber a la set -o noclobber Eingestellt haben, verwenden Sie die Syntax >|.

Zum Beispiel:

echo "some text" >| existing_file

Dies funktioniert auch, wenn die Datei noch nicht existiert


  • Überprüfen Sie, ob noclobber eingestellt ist mit: set -o | grep noclobber

  • Eine ausführlichere Erläuterung dieses speziellen Operatortyps finden Sie unter this post

  • Eine ausführlichere Liste der Umleitungsoperatoren finden Sie unter this post

69
BrDaHa

Trotz NylonSmile 's Antwort , was "irgendwie" richtig ist. Ich konnte keine Dateien überschreiben , auf diese Weise..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

um meine Probleme zu lösen, musste ich ... >!, á la ..

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

Seien Sie vorsichtig damit ...

38
Alex Gray

Wenn Ihre Umgebung das Überschreiben mit > Nicht zulässt, verwenden Sie stattdessen Pipe | Und tee wie folgt:

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

Beachten Sie, dass dies auch auf die Standardausgabe gedruckt wird. Falls dies unerwünscht ist, können Sie die Ausgabe wie folgt nach /dev/null Umleiten:

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

Beachten Sie nur, dass Sie, wenn Sie sowohl std :: cerr als auch std :: cout in eine Datei umleiten möchten, während Sie noclobber eingestellt haben (d. H. set -o noclobber) können Sie den Code verwenden:

    cmd >|file.txt 2>&1

Weitere Informationen hierzu finden Sie unter https://stackoverflow.com/a/876242 .

Auch die @ TuBui-Frage dieser Antwort auf die @ BrDaHa-Antwort lieferte oben am 9. August 18 um 9:34 Uhr.

1
greensaxman