
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.txt
würde 1 Datei namens erstellen test1.txt
. Aber beim nächsten Ausführen möchte ich, dass die neue Datei heißt test2.txt
oder 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 mktemp
eines Befehls die einfachste Möglichkeit.