Ich habe mich gefragt, ob es möglich ist, einen Befehl zu haben, der eine Datei erstellt, aber jedes Mal, wenn der Befehl ausgeführt wird, wird die in der vorherigen Ausführung erstellte Datei nicht überschrieben.
Zum Beispiel: touch test1.txt
würde 1 Datei namens erstellen test1.txt
. Aber wenn ich es das nächste Mal ausführe, möchte ich, dass die neue Datei aufgerufen wird 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.
Danke im Voraus!
quelle
touch test$(date +%Y%m%d-%H%M%S) ; touch test$(date +%Y%m%d-%H%M%S)
, es wurde nur eine Datei erstellt. Nanosekunden-Zeit funktioniert:touch test$(date +%Y%m%d-%H%M%S%N) ; touch test$(date +%Y%m%d-%H%M%S%N)
undtouch test$(date +%Y%m%d-%H%M%S%N) test$(date +%Y%m%d-%H%M%S%N)
erstellen Sie jeweils zwei Dateien.$()
da Sie Ausdrücke verschachteln können, aber Sie können auch Backticks verwenden :touch test`date +%Y%m%d-%H%M%S`
.Ich bezweifle, dass es dafür einen allgemeinen Befehl gibt, aber Sie können sich so etwas vorstellen:
Der Eingabeparameter für die Funktion wird in Präfix, Nummer und Suffix aufgeteilt. Bis die Datei vorhanden ist, wird die Nummer erhöht. Es wurde ein freier Steckplatz gefunden, mit dem die Datei erstellt wird
touch
.Der Aufteilungsmechanismus sollte an Ihre Bedürfnisse angepasst werden, und verschiedene Fehlerprüfungen sollten hinzugefügt werden.
quelle
Wenn keine Sequenznummern erforderlich sind, ist es am einfachsten, den
mktemp
Befehl zu verwenden .quelle
TMPFILE=$(mktemp /tmp/example.XXXXXXXXXX) || exit 1 echo "program output" >> $TMPFILE
TMPFILE='/tmp/tmp.$$'; touch $TMPFILE