Ich führe den folgenden Befehl aus:
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
Ich möchte alle Ordner unter dem processing
Ordner löschen (der Verarbeitungsordner sollte niemals gelöscht werden).
Der Befehl löscht auch den processing
Ordner. Wie beschränke ich das Skript darauf, nur die Ordner unter diesem Ordner zu löschen ?
Antworten:
Der einfachste Weg wäre, einfach hinzuzufügen
-mindepth 1
, wodurch die erste Tiefenhierarchie übersprungen wird und somit Ihr übergeordnetes Verzeichnis weggelassen wird.Außerdem brauchen Sie keinen zusätzlichen
-exec
Anrufrm
, Sie können nurdelete
die Ordner direkt, wenn sie leer sind.Wenn sie nicht leer sind:
Wenn Sie faul sind, können Sie auch einen Platzhalter erweitern lassen. Da
*
das aktuelle Verzeichnis standardmäßig nicht enthaltendotglob
ist ( sofern nicht festgelegt ), können Sie auch Folgendes tun:Dies würde jedoch aufgrund der
dotglob
Option auch keine versteckten Ordner einschließen .quelle
Das Problem ist, dass find das aktuelle Verzeichnis (.) Zusammen mit den anderen Verzeichnissen zurückgibt, sodass sowohl der Verarbeitungsordner als auch die Unterverzeichnisse gelöscht werden. Eine schnelle Möglichkeit, dies zu umgehen, besteht darin, die Option anzuhängen
Dies verhindert, dass find das aktuelle Verzeichnis ausgibt, und verhindert, dass es gelöscht wird.
Dies würde funktionieren, wenn Sie den Befehl im Verarbeitungsverzeichnis ausführen würden, um die Tatsache zu berücksichtigen, dass Sie einen absoluten Pfad verwenden:
Und der ganze Befehl wäre:
quelle
-name
bezieht sich auf den Basisnamen, es wird nie etwas mit einem Schrägstrich abgeglichen. Sie müssen wahrscheinlich verwenden-path
.Bereits beantwortet, möchte ich noch einen anderen Ansatz auflisten.
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
Dies schließt das oberste Verzeichnis (und auch die Unterverzeichnisse) aus, und jetzt können Sie jeden Befehl anwenden, den wir darauf anwenden möchten.
>> Optionen:
-mindepth 1: So schließen Sie das Stammverzeichnis aus
-maxdepth 1: So vermeiden Sie das Parsen von Unterverzeichnissen. (Für ein bestimmtes fragliches Szenario benötigen Sie dies nicht.)
-Typ d: Nur Verzeichnis-Typen auflisten. Diese Option sollte nach Verwendung von mindepth maxdepth verwendet werden.
quelle
-maxdepth 1
? Warum-type d
zweimal? Wie unterscheidet sich das von der akzeptierten Antwort?