Unter Linux, wie man eine Datei mit einem Namen erstellt, der das aktuelle Datum und die aktuelle Uhrzeit ist

12

Ich möchte eine Datei erstellen, deren Name ein aktuelles Datum und eine aktuelle Uhrzeit ist. Ich kann mit dem touchBefehl eine Datei erstellen . Auch kann ich mit dem dateBefehl die aktuelle Zeit abrufen. Also, ich denke, ich muss irgendwie den zweiten Befehl an den ersten weiterleiten. Wie kann ich das machen?

Der Hochstapler
quelle

Antworten:

19

Verwenden Sie den Rückgabewert eines Shell-Ausdrucks als Argument für touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Ergebnis: Eine Datei mit dem Namen z 2012-03-11_14-33-53.

Diese Antwort setzt voraus, dass Sie sie verwenden bash(sie wird im manSeitenabschnitt Befehlsersetzung beschrieben ), aber andere Shells funktionieren gleich oder nur geringfügig anders.

Daniel Beck
quelle
@MdGao Und im selben Abschnitt der Manpage beschrieben. Ich bevorzuge die Antwort, die ich gegeben habe, hier sind einige Gründe
Daniel Beck
Ich habe meinen Kommentar entfernt, weil Markdown die Backticks gebrochen hat. danke für den Link @DanielBeck
Mengdi Gao
2
@gasan Umgeben Sie es einfach mit "Anführungszeichen. Sie können die Ausgabe vorstellen zu dateersetzen , dass ein Teil der Befehlszeile, und touch Sun Mar 11 14:48:31 CET 2012würden Dateien Namen erstellen Sun, Marusw. touch "Sun Mar 11 14:48:31 CET 2012"auf der anderen Seite funktioniert gut (außer ich bin mir nicht sicher , wie gut die Doppelpunkte funktionieren).
Daniel Beck
2
@gasan Einfache Anführungszeichen funktionieren nicht, da sie keine Befehlsersetzung oder andere Interpretation zulassen. Siehe Zitieren im Bash-Handbuch.
Slhck
2
@gasan Der Unterschied besteht darin, dass der Inhalt von einfachen Anführungszeichen nicht bewertet wird. Probieren Sie es mit echo "$HOME"und echo '$HOME'. Deshalb schlug ich die Verwendung von vor ".
Daniel Beck
0

Sie können einen einfacheren Befehl verwenden

touch $(date | tr ' ' '-')
Omar Mardini
quelle
Etwas weniger elegant und wohl weniger tragbar, aber ja, das wird auch funktionieren.
Scott
OK, da ich weiß, dass Sie dies lesen, werde ich etwas näher darauf eingehen: Daniels Antwort liefert ein Ergebnis in einem bekannten und vollständig kontrollierten Format. (1) Die Ausgabe von datezeigt typischerweise die Zeit als hh: mm: ss. Ihre Antwort führt zu Dateinamen, die Doppelpunkte enthalten. Dies kann auf Windows-basierten Dateisystemen zu einem Fehler führen. (2) Die Rohausgabe eines einfachen Aufrufs von dateist vom Gebietsschema abhängig. dh an die Landessprache angepasst. Versuchen Sie LANG=de_DE dateund LANG=fr_FR datesehen Sie Beispiele. … (Fortsetzung)
Scott
(Fortsetzung)… (2a) In dem (unwahrscheinlichen?) Fall, dass Sie jemals die Sprache auf Ihrem System ändern oder Ihr Skript und eine Sammlung von Datendateien von Ihrem System an jemanden weitergeben, dessen System für a konfiguriert ist In einer anderen Sprache wird es ein Missverhältnis geben. (Ich bin nicht sicher, ob dies ein echtes Problem wäre, aber es wäre ein ästhetisches Problem.) (2b) Ich kenne kein Gebietsschema, das dies tut, aber es könnte theoretisch ein Gebietsschema geben, in datedas das Datum geschrieben wird mm / tt / jj (oder tt / mm / jj). … (Fortsetzung)
Scott
(Fortsetzung)… Wenn Sie jemals auf ein solches System gestoßen wären, hätten Sie Dateinamen mit Schrägstrichen, was zu Fehlern führen würde. (3) Daniels Antwort ergibt ein Ergebnis, bei dem die lexikografische (dh alphabetische) Reihenfolge, wie sie von lsoder erzeugt wird *, der chronologischen Reihenfolge entspricht. Mit Ihrer Antwort stehen alle FriDateien am Anfang einer lexikografisch sortierten Liste Aprund Augwerden vor allen anderen Monaten angezeigt.
Scott