GNU/Linux >> LINUX-Kenntnisse >  >> Linux

atomare Erstellungsdatei, falls nicht aus dem Bash-Skript vorhanden

Sie könnten es unter einem zufällig generierten Namen erstellen und dann umbenennen (mv -n random desired ) mit dem gewünschten Namen. Die Umbenennung schlägt fehl, wenn die Datei bereits existiert.

So:

#!/bin/bash

touch randomFileName
mv -n randomFileName lockFile

if [ -e randomFileName ] ; then
    echo "Failed to acquired lock"
else
    echo "Acquired lock"
fi

Eine 100 % reine Bash-Lösung:

set -o noclobber
{ > file ; } &> /dev/null

Dieser Befehl erstellt eine Datei namens file wenn es keine existierende Datei mit dem Namen file gibt . Wenn es eine Datei mit dem Namen file , dann nichts tun (aber einen Rückgabecode ungleich Null zurückgeben).

Vorteile bezüglich touch Befehl:

  • Aktualisiert den Zeitstempel nicht, wenn die Datei bereits existiert
  • 100 % integrierte Bash
  • Rückgabecode wie erwartet:Fehler bei file bereits vorhanden oder wenn file konnte nicht erstellt werden; Erfolg wenn file existierte nicht und wurde erstellt.

Nachteile:

  • muss den noclobber setzen Option (aber es ist in einem Skript in Ordnung, wenn Sie mit Umleitungen vorsichtig sind, oder sie danach deaktivieren).

Ich denke, diese Lösung ist wirklich das Bash-Gegenstück zu open Systemaufruf mit O_CREAT | O_EXCL .


Hier ist eine Bash-Funktion, die den mv -n verwendet Trick:

function mkatomic() {
  f="$(mktemp)"
  mv -n "$f" "$1"
  if [ -e "$f" ]; then
    rm "$f"
    echo "ERROR: file exists:" "$1" >&2
    return 1
  fi
}

Beispiele:

$ mkatomic foo
$ wc -c foo
0 foo
$ mkatomic foo
ERROR: file exists: foo

Linux
  1. Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

  2. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  3. Durchführen von atomaren Schreibvorgängen in einer Datei in Bash?

  4. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  5. Wie erstelle ich eine temporäre Datei im Shell-Skript?

35 Bash-Skriptbeispiele

Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

Finden Sie mithilfe des Shell-Skripts heraus, ob die Datei in HDFS vorhanden ist oder nicht

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner

bash + liest Variablen und Werte aus der Datei per Bash-Skript

Shebang oder nicht Shebang