
Wie kann ich in Bash die Verzeichnisse finden und löschen, die eine bestimmte Datei enthalten, und zwar nur, wenn die Datei älter als X Minuten ist?
Es gibt diese Antwortdas die Verzeichnisse findet, die eine bestimmte Datei enthalten. Allerdings ist nicht klar, wie man die Bedingung hinzufügt, dass die Datei älter als X Minuten ist.
Antwort1
Bearbeiten: einfacherer Weg:
find . -name 'foobar.dat' -mmin +3 -exec bash -c 'rm -vr "$(dirname "$1")"' bash {} \;
Dabei geht es im Wesentlichen darum, die passenden Dateien zu finden und dann ihr übergeordnetes Verzeichnis zu löschen. Die zweite „bash“-Zeichenfolge kann alles sein, sie dient nur dazu, zu vermeiden, dass der Dateiname in „$0“ gesetzt wird (obwohl dies anscheinend gut funktioniert …)
Vorherige weniger elegante Lösung:
Ich würde das Problem anders angehen:
Erstellen Sie ein kleines Skript, das Folgendes ausführt
rm -r $(dirname $1)
(z. B. das übergeordnete Verzeichnis des Arguments entfernt).Suchen Sie nach allen derartigen Dateien und rufen Sie das Skript für sie auf:
find . -name 'foobar.dat' -mmin +3 -exec rmparent_script {} \;