Vous semblez avoir mélangé plusieurs choses.
set today = 'date +%Y'
ressemble à la syntaxe tcsh, mais même dans tcsh, il attribue la chaîne date +%Y
à la variable today
, il n'exécute pas la date
commande. Comme vous utilisez probablement bash ou un autre shell POSIX, la syntaxe d'une affectation est la suivante today=some_value
(sans espaces autour du signe égal). Pour exécuter la commande et affecter sa sortie à la variable, utilisez la substitution de commande :
today=$(date +%Y-%m-%d)
(J'ai également complété la spécification de date). Vous pouvez utiliser backquotes au lieu de dollar-parenthèses, mais il est susceptible d'être visuellement confondu avec des guillemets avant et les règles quand vous avez besoin des citations dans une commande backquoted sont assez complexes et dépendant de la mise en œuvre, il est donc préférable de ne pas tenir à $(…)
(qui a le même effet avec une syntaxe plus saine).
Vous avez utilisé &
à la fin de plusieurs commandes. Cela fait exécuter la commande en tâche de fond, ce qui n’est pas voulu ici. Je suppose que vous vouliez dire &&
, ce qui signifie d'exécuter la commande suivante uniquement si la première commande a réussi.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Une alternative à l'utilisation &&
après chaque commande consiste à démarrer votre script avec set -e
. Cela indique au shell d'arrêter l'exécution du script dès qu'une commande renvoie un statut différent de zéro (à l'exception des commandes dans les if
conditions et de quelques autres cas).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Votre find
commande est correcte mais ne fait probablement pas ce que vous avez l'intention de faire (bien que je ne sache pas exactement ce que c'est).
Vous créez un répertoire avec mkdir
, puis vous le parcourez immédiatement find
. Cela ne sera utile que si le répertoire existe déjà. Vouliez-vous créer un répertoire pour les journaux d'aujourd'hui et déplacer des fichiers récents d' The_Logs
un répertoire appelé par exemple The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Ou aviez-vous l'intention de renommer les fichiers journaux d'aujourd'hui pour ajouter le suffixe $today
? Cela nécessite de calculer le nom de fichier différent pour chaque fichier à déplacer.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Notez que j’avais l'habitude -mtime
de déplacer les fichiers en fonction de leur heure de modification, et non de -atime
l'heure à laquelle le fichier a été lu pour la dernière fois (si votre système en tient compte, sinon, l'heure peut être aussi ancienne que le mtime).
:
car il sera alors lu en tant qu'hôte dans rsync et scp. stackoverflow.com/a/37143274/390066