Ich verwende Ubuntu 14 Desktop. Ich verwende diese Maschine, um andere Maschinen zu sichern und als FTP-Server für die Sicherheitskameras.
Ich muss einen Cron-Job erstellen, der automatisch Dateien löscht, die älter als 30 Tage sind. Ich habe etwas gesucht und glaube, den richtigen Befehl gefunden zu haben, aber ich möchte sichergehen, dass ich nichts übersehe, bevor ich ihn ausführe.
* 4 * * * find /home/USER/DIRECTORY1/DIRECTORY2/ -mindepth 1 -type f -mtime 29 -delete
Muss ich „sudo“ vor den Find-Befehl setzen?
Muss ich „+“ vor die Anzahl der Tage „29“ setzen?
Akzeptierte Antwort:
Geben Sie zuerst Ihren find ...
ein Befehl in einer bash
Skript und rufen Sie dieses Skript aus Ihrem crontab
auf . Wenn Sie ein verschlüsseltes Home-Verzeichnis haben (cat /home/.ecryptfs/$USER/.ecryptfs/Private.mnt
) müssen Sie Ihr Skript außerhalb Ihres $HOME
speichern Verzeichnisbaum. Halten eines Befehls in crontab
erschwert das Konfigurieren, Protokollieren und Debuggen, und die crontab
Befehlsparser ist nicht so schlau wie bash
s.
Zweitens, immer, Immer, IMMER find
testen mit -print
, und bringen Sie es zum Laufen, bevor Sie -delete
in Betracht ziehen .
Drittens das find
teste „-mtime 29
“ sagt find
„Suchen Sie die mtime
der Datei , und geben Sie True
zurück wenn es gleich 29
ist . Sie sollten -mtime +29
verwenden , die find
sieht als „more than 29
“, das ist, was Sie wollen. Von man find
:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
Stellen Sie viertens sicher, dass Sie Schreibzugriff auf die Verzeichnisse in /home/USER/DIRECTORY1/DIRECTORY2/
haben .
Fünftens, meinst du /home/USER/DIRECTORY1/DIRECTORY2/
oder /home/$USER/DIRECTORY1/DIRECTORY2/
? Wenn $USER
für die Benutzer-ID des Benutzers ist, haben Sie ein Problem:cron
definiert $USER
nicht in der Laufzeitumgebung. Es definiert $HOME
, also könnten Sie $HOME/DIRECTORY1/DIRECTORY2
verwenden .