Befehlszeile: Datei mit neuem Dateinamen erstellen, wenn der Dateiname bereits existiert

Befehlszeile: Datei mit neuem Dateinamen erstellen, wenn der Dateiname bereits existiert

Ich habe mich gefragt, ob es möglich ist, einen Befehl zu haben, der eine Datei erstellt, aber bei jeder Ausführung des Befehls die bei der vorherigen Ausführung erstellte Datei nicht überschreibt.

Beispiel: touch test1.txtwürde 1 Datei namens erstellen test1.txt. Aber beim nächsten Ausführen möchte ich, dass die neue Datei heißt test2.txtoder so ähnlich. Also ohne die bereits vorhandene Datei zu überschreiben. In gewisser Weise könnte es ohne Probleme mehrmals ausgeführt werden.

Verstehen Sie mich nicht falsch, ich versuche nicht, mehrere Dateien mit einem Befehl zu erstellen.

Dank im Voraus!

Antwort1

Die einfachste Lösung wäre, dem Dateinamen einen Zeitstempel hinzuzufügen und keine einzelne Ziffer zu verwenden.

Die einfachste Methode zum Erstellen einer leeren Datei wäre: touch test$(date +%Y%m%d-%H%M%S)Dies würde zu einer Datei mit dem Namen führen test20110802-170410. Beim zweiten Mal test*wird ein neuerer Zeitstempel erstellt, sodass 2 Dateien entstehen.

Antwort2

Ich bezweifle, dass es dafür einen allgemeinen Befehl gibt, aber Sie können sich so etwas vorstellen:

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

Die Eingabeparameter der Funktion werden in Präfix, Nummer und Suffix aufgeteilt, dann wird die Nummer hochgezählt, bis die Datei existiert. Wird ein freier Slot gefunden, wird die Datei mit erstellt touch.

Der Splittmechanismus sollte Ihren Bedürfnissen angepasst und um diverse Fehlerprüfungen ergänzt werden.

Antwort3

Wenn keine Sequenznummern erforderlich sind, ist die Verwendung mktempeines Befehls die einfachste Möglichkeit.

verwandte Informationen