Ich bin ein absoluter Neuling unter Linux, aber ich fange an, den Dreh raus zu kriegen. Ich besitze einen Ubuntu Server 16.04, auf dem ein FTP-Server zum Sichern von Sicherheitsvideodateien ausgeführt wird. Die Dateien werden in Ordnern gespeichert werden wie: /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
und so weiter.
Beachten Sie, dass jeder securityfolderN
Benutzer ein anderer ist.
Da meine Festplatten nicht ständig voll sein sollen, möchte ich täglich Dateien in diesen Ordnern löschen, die älter als 7 Tage sind.
files
cron
delete
automation
Jacco van de Wijgaart
quelle
quelle
/home
enthält normalerweise einen Unterordner für jeden Benutzer. Wenn Sie Ihre Backups nicht als unterschiedliche Benutzer speichern möchten (keine gute Idee), sollten Sie einen anderen Speicherort in Betracht ziehen, z/home/security/backup1
. B. und so weiter.Antworten:
Zunächst werden mit diesem Befehl alle Dateien gesucht und gelöscht, die älter als 7 Tage sind und sich in einem Unterverzeichnis befinden, in dem der
/home
Name beginnt mitsecurityuser
:Sie brauchen
-mtime +6
und nicht+7
weil-mtime
24h Perioden zählt. Wie im-atime
Abschnitt vonman find
(-mtime
funktioniert auf die gleiche Weise) erklärt:Um eine Datei zu finden, die vor 7 oder mehr Tagen geändert wurde, müssen Sie also nach Dateien suchen, die vor mehr als 6 Tagen geändert wurden
-mtime +6
.Der nächste Schritt besteht darin, diesen Befehl einmal am Tag auszuführen. Da jeder
securityuserN
Benutzer ein anderer ist (möglicherweise möchten Sie dieses Setup überdenken, was alles komplizierter macht), muss dies als root ausgeführt werden. Also, editiere/etc/crontab
:Und füge diese Zeile hinzu:
Dadurch wird der
find
Befehl einmal täglich ausgeführt und die Dateien gelöscht.quelle
find '/home/securityuser/*' -mtime +6 -type f -delete
(bei allen relevanten und angemessenen Änderungen in der Benutzererstellung) im Allgemeinen eine bessere Idee sein könnte alsfind '/home/securityuser*' -mtime +6 -type f -delete
(kein Schrägstrich im Pfad) ...?/home/securityuserN
, ohne den Schrägstrich werden sie also nicht gefunden.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. Der Platzhalter sollte durch die Shell erweitert werden, nicht durchfind
, also sollte es gewesen seinsecurityuser*
(keine Anführungszeichen). Siehe aktualisierte Antwort. Danke für den Hinweis, Stelio, ich kann nicht glauben, dass es noch niemandem aufgefallen ist! Ti vlakas!Nach meinem Wissen:
versuche den
find
Befehl so:quelle
find /home/jacco/ -mtime +1 -type f -delete
und es scheint zu funktionieren. Wie kann ich das automatisieren?#!/bin/bash
und den Code darunter? oder bin ich hier wirklich dumm?find '/u*' -name local
.-name "foo*"
Solche Direktiven sollten in Anführungszeichen gesetzt werden, wenn sie Glob-Zeichen enthalten.