In Bash: So finden und löschen Sie Verzeichnisse, die eine bestimmte Datei enthalten, nur wenn die Datei älter als X Minuten ist

In Bash: So finden und löschen Sie Verzeichnisse, die eine bestimmte Datei enthalten, nur wenn die Datei älter als X Minuten ist

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 {} \;
    

verwandte Informationen