2016-08-30 3 views
1

Ich habe ein Skript, das Dateien löscht, die älter als +2 Tage in einem bestimmten Verzeichnis sind. Ich möchte überprüfen, ob es eine Datei mit dem heutigen Datum gibt, die vor dem Entfernen der älteren Dateien erstellt wurde. Das ist, was ich habe:Ermitteln, ob eine Datei mit dem heutigen Datum erstellt wurde und dann ältere Dateien entfernen

#!/bin/bash 

find /var/backups/server1 -type f -mtime +2 -exec rm {} \; 
find /var/backups/server2 -type f -mtime +2 -exec rm {} \; 
find /var/backups/server3 -type f -mtime +2 -exec rm {} \; 
find /var/backups/server4 -type f -mtime +2 -exec rm {} \; 
find /var/backups/server5 -type f -mtime +2 -exec rm {} \; 

So Grundsätzlich gilt: 1.Überprüfen Verzeichnis mit Datei mit dem heutigen Datum. 2.Wenn affirmativ/var/backups/serverX -type f -mtime +2 -exec rm {} \; 3.Ist nicht "execute scriptX" (was möglicherweise eine Mail-Benachrichtigung)

danke!

+0

tun könnte, wenn es eine Datei mit dem heutigen Datum ist, möchten Sie ältere Dateien löschen. & wenn es keine Datei gibt, was soll passieren? Dateien löschen, die älter sind als vorgestern? oder nichts tun? – anishsane

+0

Mit anderen Worten, möchten Sie die neueste und alle älteren löschen? – anishsane

+0

Also Grundsätzlich: 1.Check Directory mit Datei mit dem heutigen Datum. 2.Wenn affirmativ/var/backups/serverX -type f -mtime +2 -exec rm {} \; 3.Wenn nicht "execute scriptX" (was möglicherweise eine Mail-Benachrichtigung) danke! –

Antwort

1

Sie so etwas wie dieses So

find /var/backups/ -maxdepth 1 -type d -print0 | while read -rd '' dirname 
do 
arry=($(find "${dirname}" -type f -atime 0)) 
#Checks if there is a file that is updated today. 
[ "${#arry[@]}" -ge 1 ] && find "${dirname}" -type f -mtime +2 -exec rm {} \; 
done 
+0

Danke für Ihre schnelle Antwort. Das Problem ist, dass der Verzeichnisname nicht immer Server ist, es gibt über 50 Server unterschiedliche Namen. Also ich denke, das "für i in {1..4} do arry = ($ (find/var/backups/server" $ {i} "würde in meinem Fall nicht funktionieren –

+0

@JoseluisVanta: Bitte beachten Sie das Update und verwenden' find -print0 - read -d '' 'Kombination zum Analysieren nicht standardmäßiger Namen – sjsam

+1

" find ... -atime 0 "gilt für jede Datei, auf die in den letzten 24 Stunden zugegriffen wurde. Bessere" -mtime 0 "(Dateien wurden zuletzt geändert 24 Stunden) oder, wenn Ihre "finden" Version es unterstützt "finden. -type f -newerBt gestern" – gile

Verwandte Themen