Sie scheinen verschiedene Dinge durcheinander gebracht zu haben.
set today = 'date +%Y'
sieht aus wie tcsh-Syntax, aber selbst in tcsh wird die Zeichenfolge date +%Y
der Variablen zugewiesen today
, und der date
Befehl wird nicht ausgeführt . Da Sie wahrscheinlich Bash oder eine andere POSIX-Shell verwenden, lautet die Syntax einer Zuweisung today=some_value
(ohne Leerzeichen um das Gleichheitszeichen). Verwenden Sie die Befehlssubstitution , um den Befehl auszuführen und seine Ausgabe der Variablen zuzuweisen :
today=$(date +%Y-%m-%d)
(Ich habe auch die Datumsangabe vervollständigt). Sie können einfache Anführungszeichen statt Dollar-Klammern zu verwenden, aber es ist anfällig für visuell verwirrt mit nach vorn Anführungszeichen zu sein, und die Regeln für die, wenn Sie Anführungszeichen innerhalb eines backquoted Befehls benötigen , sind ziemlich komplex und abhängig von der Implementierung, also ist es besser , nicht zu kleben $(…)
(die hat den gleichen Effekt mit einer saneren Syntax).
Sie haben &
am Ende mehrere Befehle verwendet. Dadurch wird der Befehl im Hintergrund ausgeführt, was hier nicht erwünscht ist. Ich vermute, Sie meinten &&
, das heißt, den nächsten Befehl nur auszuführen, wenn der erste Befehl erfolgreich war.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Eine Alternative zur Verwendung &&
nach jedem Befehl besteht darin, das Skript mit zu starten set -e
. Dadurch wird die Shell angewiesen, die Ausführung des Skripts zu beenden, sobald ein Befehl einen Status ungleich Null zurückgibt (mit Ausnahme von Befehlen unter bestimmten if
Bedingungen und in einigen anderen Fällen).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Ihr find
Befehl ist in Ordnung, tut aber wahrscheinlich nicht das, was Sie vorhaben (obwohl ich nicht genau weiß, was das ist).
Sie erstellen ein Verzeichnis mit mkdir
und durchlaufen es dann sofort mit find
. Dies ist nur dann sinnvoll, wenn das Verzeichnis bereits vorhanden ist. Wollten Sie ein Verzeichnis für die heutigen Protokolle erstellen und die zuletzt verwendeten Dateien The_Logs
in ein Verzeichnis mit dem Namen "eg" verschieben The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Oder wollten Sie die heutigen Protokolldateien umbenennen, um das Suffix hinzuzufügen $today
? Dies erfordert die Berechnung des unterschiedlichen Dateinamens für jede zu verschiebende Datei.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Beachten Sie, dass ich -mtime
Dateien basierend auf dem Änderungszeitpunkt verschoben habe und nicht nach -atime
dem Zeitpunkt, zu dem die Datei zuletzt gelesen wurde (wenn Ihr System dies verfolgt - wenn dies nicht der Fall ist, kann der Zeitpunkt so weit zurückliegen wie der mtime).
:
da es dann als Host in rsync und scp gelesen wird. stackoverflow.com/a/37143274/390066