% 2ist einfach eine Modulo-Operation, die 1 zurückgibt, wenn die ihr gegebene Tageszahl ungerade ist, und 0, wenn sie gerade ist.
Videonauth
+1für die Lösung mit der seconds since 1970-01-01 00:00:00 UTC Option. Auf diese Weise müssen Sie nicht über das 30/
31-
@RoVo genau das habe ich wegen der zwei ungeraden Tage 31 und 1 gesucht! Sehr schlau!
Stefan
Wahr. Ich aktualisiere die Antwort.
pLumo
2
Ich stimme den Antworten "Täglich den Cronjob ausführen, Verzeichnisse im Skript wechseln" zu, aber ich würde es so machen:
#!/bin/bash
# use hidden link
last=$HOME/.last_destination
#
declare -a dirs
dirs[0]="destination.0"
dirs[1]="destination.1"
#
target=
#
# If $last is a link, it points to the last used directory. Otherwise,
# initialize it and use $HOME/destination.0
if [[ -L "$last" ]] ; then
# get the name of the linked dir
old="$(stat --printf="%N" "$last" | cut -d\' -f4)"
if [[ "$old" == "${dirs[0]}" ]] ; then
target="${dirs[1]}"
else
target="${dirs[0]}"
fi
else
# "$last" is not a link - first time initialization
target="${dirs[0]}"
fi
# now, with $target set, point the $last link at $target, for next time
rm "$last"
ln -s "$target" "$last"
#
# debugging printouts - remove in real life
echo "$target"
ls -l "$last"
Wenn es in Ordnung wäre, ~/destination.0an geraden und ~/destination.1an ungeraden Daten zu schreiben , sollte die folgende Crontab-Zeile funktionieren. Die Sicherung wird um Mitternacht gestartet (0 Minuten, 0 Stunden, die beiden ersten Elemente in der Zeile).
und wenn es funktioniert, können Sie ersetzen cd dir2copymit cd to-the-actual-directory-you-want-to-copy, ersetzen Sie ~mit /home/your-home-directoryund entfernen Sie die beiden echoWörter , um es den richtigen Job zu machen tun.
Testen Sie es erneut und ändern Sie dann die Crontab-Linie. (Die Umgebung in crontab ist so, dass Sie möglicherweise explizite vollständige Pfade zu Programmen, Verzeichnissen und Datendateien benötigen.)
/bin/date '+%d'Findet den Tag des Monats und %ist die verbleibende Operation, die ein 0oder erzeugt 1, das am Ende der Befehlszeile angehängt wird.
Vielleicht bevorzugen Sie /bin/date '+%j', dass der Tag des Jahres, zum Beispiel heute, der 1. Dezember, der Tag ist #335.
Ja, Sie haben Recht @RoVo. Mir ist aufgefallen, dass Sie das behoben haben, und ich werde Ihre Antwort positiv bewerten :-) Sie haben mehr Mühe als ich aufgewendet, damit die Dinge genau gemäß der Spezifikation in der Frage funktionieren. Zu Neujahr wäre es für mich in Ordnung, dass der Wechsel übersprungen würde. Mein Computer könnte sowieso ausgeschaltet sein ;-)
Sudodus
Stimmt, aber ich habe mit dem gleichen Problem angefangen ... +%w: Fick die Woche hat eine ungerade Anzahl von Tagen ... dann +%d, dann +%j... dann ... Scheiße, ich werde gefickt ...
pLumo
Wie auch immer, nach einem Schaltjahr +%jwird das neue Jahr korrekt funktionieren ^^
Richtig, es gibt einen Fehler in meinem (nicht getesteten) Skript, die letzte Zeile sollte * .last in * .1 anstelle von * .0 umbenennen ... und in der Zwischenzeit habe ich bessere Lösungen mit Modulo 2-Berechnungen gesehen
Luc Moreau
Sogar als Sie jeden Tag kopieren destination.1und destination.0als Backup haben würden .. aber tatsächlich nicht zwischen zwei Zielen wechseln.
Antworten:
Einzeiler:
Erläuterung:
+%s
) von heute um 0:00 (-d 0:00
) zurück.(3600*24)
wird die Anzahl der Tage aus der Unix-Epoche zurückgegeben.%2
gibt 0 oder 1 für ungerade oder gerade Tage seit Beginn der Unix-Epoche zurück.quelle
% 2
ist einfach eine Modulo-Operation, die 1 zurückgibt, wenn die ihr gegebene Tageszahl ungerade ist, und 0, wenn sie gerade ist.+1
für die Lösung mit derseconds since 1970-01-01 00:00:00 UTC
Option. Auf diese Weise müssen Sie nicht über das 30/Ich stimme den Antworten "Täglich den Cronjob ausführen, Verzeichnisse im Skript wechseln" zu, aber ich würde es so machen:
quelle
Wenn es in Ordnung wäre,
~/destination.0
an geraden und~/destination.1
an ungeraden Daten zu schreiben , sollte die folgende Crontab-Zeile funktionieren. Die Sicherung wird um Mitternacht gestartet (0 Minuten, 0 Stunden, die beiden ersten Elemente in der Zeile).Unter diesem Link finden Sie eine Erläuterung der Crontab-Syntax.
Planen von Aufgaben mit Cron-Jobs
Testen Sie den Befehlsteil der Zeile in einem Terminalfenster.
und wenn es funktioniert, können Sie ersetzen
cd dir2copy
mitcd to-the-actual-directory-you-want-to-copy
, ersetzen Sie~
mit/home/your-home-directory
und entfernen Sie die beidenecho
Wörter , um es den richtigen Job zu machen tun.Testen Sie es erneut und ändern Sie dann die Crontab-Linie. (Die Umgebung in crontab ist so, dass Sie möglicherweise explizite vollständige Pfade zu Programmen, Verzeichnissen und Datendateien benötigen.)
/bin/date '+%d'
Findet den Tag des Monats und%
ist die verbleibende Operation, die ein0
oder erzeugt1
, das am Ende der Befehlszeile angehängt wird.Vielleicht bevorzugen Sie
/bin/date '+%j'
, dass der Tag des Jahres, zum Beispiel heute, der 1. Dezember, der Tag ist#335
.quelle
+%w
: Fick die Woche hat eine ungerade Anzahl von Tagen ... dann+%d
, dann+%j
... dann ... Scheiße, ich werde gefickt ...+%j
wird das neue Jahr korrekt funktionieren ^^%100
: PFühren Sie dieses Skript täglich von cron aus:
quelle
~/destination.1
...destination.1
unddestination.0
als Backup haben würden .. aber tatsächlich nicht zwischen zwei Zielen wechseln.