Dies funktioniert nicht, da der Befehl date
eine Zeichenfolge mit Leerzeichen zurückgibt.
$ date
Wed Oct 16 19:20:51 EDT 2013
Wenn Sie wirklich solche Dateinamen möchten, müssen Sie diese Zeichenfolge in Anführungszeichen setzen.
$ touch "foo.backup.$(date)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013
Sie denken wahrscheinlich an eine andere Zeichenfolge, die angehängt werden soll. Normalerweise benutze ich so etwas:
$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25
Weitere Formatierungscodes für Datum und Uhrzeit finden Sie auf der Manpage für das Datum.
Zusätzliche Formate
Wenn Sie die vollständige Kontrolle übernehmen möchten, wenn Sie die Manpage aufrufen, können Sie Folgendes tun:
$ date +"%Y%m%d"
20131016
$ date +"%Y-%m-%d"
2013-10-16
$ date +"%Y%m%d_%H%M%S"
20131016_193655
HINWEIS: Sie können date -I
oder verwenden, date --iso-8601
die die gleiche Ausgabe wie erzeugen date +"%Y-%m-%d
. Dieser Schalter kann auch ein Argument verwenden, um verschiedene Zeitformate anzugeben :
$ date -I=?
date: invalid argument ‘=?’ for ‘--iso-8601’
Valid arguments are:
- ‘hours’
- ‘minutes’
- ‘date’
- ‘seconds’
- ‘ns’
Try 'date --help' for more information.
Beispiele:
$ date -Ihours
2019-10-25T01+0000
$ date -Iminutes
2019-10-25T01:21+0000
$ date -Iseconds
2019-10-25T01:21:33+0000
touch foo`date +%F`
auch gut.csh
Shell...
) anstatt auf$(..)
. C-Shells unterstützen diese Notation anscheinend nicht für Subshells.date +"%Y-%m-%d"
ist das gleiche wiedate -I
. Ich würde die ISO-Formate trotzdem empfehlen. Die Genauigkeit kann durch Hinzufügen von Stunden, Minuten, Sekunden oder ns zum Parameter angegeben werden-I
. Beispieldate -Iseconds
.Dies erweitert sich zu so etwas wie
cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. Das Leerzeichen vor den Klammern beginnt mit einem neuen Wort.Die geschweiften Klammern werden in getrennten Wörtern angegeben und daher wörtlich interpretiert. Darüber hinaus
$((…))
ist die Syntax für die arithmetische Erweiterung; Die Ausgabe vondate
ist nichts anderes als ein arithmetischer Ausdruck. Kommandosubstitution verwendet einen einzigen Satz von Klammern:$(date)
.Näher. Sie hätten dies mit geschweiften Klammern ausdrücken können als
cp foo.{txt,.backup.`date`}
. Es gibt immer noch das Problem, dass die Ausgabe vondate
Leerzeichen enthält und daher in doppelte Anführungszeichen gesetzt werden muss. Das würde funktionieren:oder
Das Standardausgabeformat von
date
ist für einen Dateinamen nicht geeignet und funktioniert möglicherweise auch nicht, wenn ein Gebietsschema/
Zeichen im Standardausgabeformat verwendet. Verwenden Sie ein YMD-Datumsformat, damit die lexikografische Reihenfolge der Dateinamen in chronologischer Reihenfolge angezeigt wird (und um Unklarheiten zwischen US-amerikanischen und internationalen Datumsformaten zu vermeiden).quelle
Wenn Sie das ausführliche Datum wirklich verwenden möchten, sollten Sie das Backtick schützen. Das mit diesem Datumsformat ist, dass es eingebettete Leerzeichen hat, ein Nein-Nein in einer Unix-Shell, es sei denn, Sie setzen sie in Anführungszeichen (oder es maskieren sie auf andere Weise).
Ich bevorzuge jedoch das kürzere ISO-Format:
quelle
Verwenden Sie eine Funktion, es wird Ihr Leben leichter machen. Das benutze ich:
quelle
Wie
date
standardmäßig Leerzeichen in der Ausgabe, ist Ihr letzter Befehl fehlgeschlagen. Wenn Sie das letzte Argument in mit zitiert hatten"
, sollte es funktionieren. Ihre anderen Versuche haben nur eine falsche SyntaxHier eine mögliche Lösung ohne Leerzeichen:
oder
Wenn Sie hinzufügen
zu Ihrem
.bashrc
und Wieder login / lassen Sie Ihre bash nachzulesen es, müssen Sie rufen Sie einfach anbk file.txt
.quelle
--iso-8601
Schalter nicht an, daher habe ich den Link hier eingefügt. GNU-Datumsoptionen: --iso-8601Sie kopieren die Datei in eine Sicherungsdatei, deren Name mit angefügtem Zeitstempel erstellt wird
ODER:
Sie können den Inhalt der Datei mit "cat" anzeigen und die Ausgabe in eine Sicherungsdatei umleiten, deren Name mit angefügtem Zeitstempel erstellt wird
Sie können auch mehr FORMAT-Steuerelemente nach Bedarf verwenden, z. B .:% H,% M,% S usw.
quelle
cat
Umleitung gegenübercp
?Wenn ich ein Backup einer Datei machen muss, mache ich das normalerweise einfach so.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt foo.backup.2017-9-19.txt
quelle
%F
liefert das Datumsformat zweistellige Monate undls -l
normalerweise ein bisschen mehr Informationen als nur Dateinamen.In bash können Sie Folgendes eingeben:
Welches erweitert sich zu:
Ergebend:
Das Rindfleisch
date -Is
. Ich benutze es gerne, weil es leicht zu merken, einzugeben und kurze Versionen zuzulassen ist (zum Beispiel,-In
wenn Sie ein Präzisionsfreak sind).!
startet einen Event-Bezeichner:Und
$
ist ein Wortbezeichner:quelle
Wenn Sie nur eine Sicherungskopie der Datei oder des Verzeichnisses erstellen möchten, warum geben Sie dann auch das Ziel ein? Verwenden Sie einfach die Shell-Erweiterung, um das Datum am Ende des Dateinamens der Kopie einzufügen.
dh
was in ... endet
oder einfach benutzen
Fügen Sie das Datum Ihren Bedürfnissen entsprechend hinzu. :)
quelle