Wie kann eine Datei aus einem Shell-Skript neu geschrieben werden, ohne die Datei zu beschneiden, wenn der Speicherplatz aufgebraucht ist?
Dieses praktische Perl-One-Liner ersetzt alle Vorkommen von "foo" durch "bar" in einer Datei namens test.txt:
perl -pi -e 's/foo/bar/g' test.txt
Dies ist sehr nützlich, aber ...
Wenn das Dateisystem, auf dem sich test.txt befindet, keinen Speicherplatz mehr hat, wird test.txt zu einer leeren Datei beschnitten.
Gibt es einen einfachen Weg ohne Rennbedingungen, um diese Beschneidung zu vermeiden?
Ich möchte, dass die Datei test.txt unverändert bleibt und der Befehl einen Fehler zurückgibt, wenn das Dateisystem keinen Platz mehr hat.
Die Lösung sollte idealerweise einfach aus einem Shell-Skript verwendet werden können, ohne zusätzliche Software installieren zu müssen (außer den "Standard"-UNIX-Tools wie sed und perl).
Vielen Dank!