Ich mache das lieber nicht in PHP, also hoffe ich, dass jemand, der sich mit Shell-Skripten auskennt, helfen kann.
Ich benötige ein Skript, das das Verzeichnis rekursiv durchläuft und feststellt, dass alle Dateien mit dem Datum der letzten Änderung größer als ein Datum sind. Anschließend werden die Dateien tariert und komprimiert, wobei die Pfadinformationen beibehalten werden.
Antworten:
so einfach wie:
Hier
find . -mtime -1
werden alle Dateien im (rekursiv) aktuellen Verzeichnis ausgewählt, die am Vortag geändert wurden. Sie können Brüche verwenden, zum Beispiel:quelle
-newermt
ist viel besser.-type f
um nur Dateien auszuwählen. Dadurch bleibt die Ordnerstruktur erhalten, es werden jedoch nur Dateien mit Änderungen gesichert.Wenn Sie GNU haben
find
, gibt es eine Legion relevanter Optionen. Der einzige Nachteil ist, dass die Schnittstelle zu ihnen weniger als hervorragend ist:-mmin n
(Änderungszeit in Minuten)-mtime n
(Änderungszeit in Tagen)-newer file
(Änderungszeit neuer als Änderungszeit der Datei)-daystart
(Startzeit von aktueller Zeit bis Tagesbeginn anpassen)Der schwierige Teil besteht darin, die Anzahl der Minuten seit einer bestimmten Zeit zu bestimmen.
Eine erwägenswerte Option: Verwenden Sie diese Option
touch
, um eine Datei mit dem erforderlichen Änderungszeitstempel zu erstellen. dannfind
mit verwenden-newer
.Dies sucht nach Dateien, die neuer als 2009-01-03T12: 31: 43 sind. In einem Skript
/tmp/wotsit
wäre dies eindeutig ein Name mit der PID oder einem anderen Wert, um ihn eindeutig zu machen. und es würde eine geben,trap
um sicherzustellen, dass es entfernt wird, selbst wenn der Benutzer unterbricht, und so weiter und so fort.quelle
-newermt '2009-01-03T12:31:43'
vermeiden, dass eine Datei nur als Referenz erstellt werden muss.-newermt
(dokumentiert unter,-newerXY
da es mehrere Optionen gibt; X = m, Y = t in diesem Fall). Der GNU-Fund auf den (fast archaischen) Linux-Systemen, die ich verwende, unterstützt die Optionen nicht, daher ist er relativ neu. Danke für die Warnung.-newermt '-2 weeks'
.-newermt '2009-01-03T12:31:43'
sieht toll aus, aber leider scheint es alles in der falschen Zeitzone zu interpretieren: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlSie können dies direkt mit Teer tun und noch besser:
Dadurch wird tar angewiesen, Dateien zu komprimieren, die neuer als der 1. Januar 2014, 18:00:00 Uhr sind.
quelle
tar
nur mit OS X und FreeBSD unterstützt,--newer
was die lange Option für-N
GNU isttar
.Dies funktioniert für einige Dateien. Sie möchten "-print0" und "xargs -0" einfügen, falls einer der Pfade Leerzeichen enthält. In diesem Beispiel wird nach Dateien gesucht, die in den letzten 7 Tagen geändert wurden. Verwenden Sie "+7", um diejenigen zu finden, die vor den letzten 7 Tagen geändert wurden.
Wie diese Seite warnt, kann xargs dazu führen, dass der Befehl tar bei vielen Argumenten mehrmals ausgeführt wird, und das Flag "-c" kann Probleme verursachen. In diesem Fall möchten Sie Folgendes:
Sie können ein komprimiertes Teerarchiv nicht mit tar aktualisieren, daher müssten Sie es in einem zweiten Schritt bzip2 oder gzip.
quelle
-type f
um nur Dateien auszuwählen. Dadurch wird die Ordnerstruktur beibehalten, die Dateien werden jedoch nur mit Änderungen gesichert / kürzlich hinzugefügt.Dies sollte alle Dateien anzeigen, die innerhalb der letzten 7 Tage geändert wurden.
Pfeife das in Teer / Reißverschluss, und du solltest gut sein.
quelle
Versuchen Sie unter Linux, die Manpage des Befehls find zu lesen
so etwas sollte
und du hast es
quelle
Sie können eine Liste der Dateien erhalten, die zuletzt nach x Tagen geändert wurden mit:
Dann müssen Sie nur noch Dateien in der resultierenden Liste tarieren und komprimieren, z.
für alle im letzten Monat geänderten Dateien.
quelle
Ich würde einfach Folgendes tun, um alle neuen Dateien von vor 7 Tagen zu sichern
Beachten Sie, dass Sie "vor 7 Tagen" auch durch alles ersetzen können, was Ihren Anforderungen entspricht
Kann sein :
date -d'yesterday' +"%d-%b"
Oder auch :
date -d'first Sunday last month' +"%d-%b"
quelle
Dieses Skript findet Dateien mit einem Änderungsdatum von zwei Minuten vor und nach dem angegebenen Datum (und Sie können die Werte in den Bedingungen gemäß Ihren Anforderungen ändern).
Wenn Sie beispielsweise möchten, dass Dateien nur ein Änderungsdatum vor dem angegebenen Datum haben, können Sie den Parameter in ändern
120
, indem Sie die Bedingungen von verwerfen0
$DIFF_IN_DATE
$DIFF_IN_DATE1
Parameter.Wenn Sie Dateien mit einem Änderungsdatum 1 Stunde vor und nach dem angegebenen Datum haben möchten, ersetzen Sie sie einfach
120
durch3600
inif CONDITION
.quelle