Manchmal hat man eine Verzeichnisstruktur mit Unterordnern mit identischem Namen. Ich zeige ich euch, wie ihr sie finden und löschen könnt.
In meinem Fall benötigte ich dieses „Massenlöschen“ nach bzw. während des Umzugs von Daten von einer Synology-NAS auf eine TrueNAS. Synology legt standardmäßig von allen Bildern, die sie auf ihren Volumes findet, Vorschaubilder in verschiedenen Auflösungen an. Dies kann auch beispielsweise in Ordner mit Audiodateien geschehen, falls dort zum Beispiel ein JPEG von dem Albumcover liegt.
Nützlich finde ich das Ganze an sich schon, besonders für die User-Experience. Nur leider bekommt man als Synology-User eher weniger davon mit, denn diese Vorschaubilder liegen in versteckten Ordnern namens „@eaDir“. Ich selbst habe es auch erst mitbekommen, als ich die gesamten Hauptordner auf die TrueNAS kopiert habe und da plötzlich viele Ordner auftauchten, die auch nicht gerade unwesentlich klein waren.
Keine Produkte gefunden.
Lange Rede, kurzer Sinn, da ich mich natürlich nicht durch alle Unterordner meines Shares durchklicken wollte, um diese versteckten Ordner zu löschen, brauche ich eine schnelle Lösung auf der Kommandozeile.
Die Lösung: Unterordner mit identischem Namen finden und löschen mit „find“ und „rm“
Im Wesentlichen besteht diese Lösung aus zwei Teilen. Einmal dem finden dieser Ordner durch das „find“ Kommando und dem anschließenden Löschen des Ganzen via „rm„. Kommen wir also zum ersten Teil:
find . -name @eaDir -type d
Wem die einzelnen Attribute des find-Befehls nicht geläufig sind, hier eine kurze Erläuterung. Der Punkt „.“ ist der Ort an dem gesucht werden soll. In meinem Fall der Ordner in dem ich mich aktuell befinde, also sagen wir beispielsweise „Sommerurlaub 2021“. Dies kann natürlich auch bspw. /mnt/DATA/SHARE/Sommerurlaub 2021 lauten. Hauptsache der Pfad zeigt auf den richtigen Ordner.
Das Attribut „-name“ ist so gesehen der Suchbegriff, dieser folgt im Anschluss. Über „-type d“ geben wir der Suche mit, dass es sich um einen Ordner handelt; „d“ steht für Directory.
Zur Überprüfung, ob die Suche korrekt funktioniert, könnt ihr diesen Befehl jetzt schon einmal absetzen. Die Anzeige sollte in etwa so aussehen:
Ist man mit dem Suchergebnis zufrieden, kann man nun den Befehl um das Löschen der Ergebnisse erweitern. Dies geschieht durch das Attribut „-exec“:
find . -name @eaDir -type d -exec rm -rf {} +
Keine Produkte gefunden.
Im Endeffekt wendet man mit „exec“ einen Shellbefehl auf die Suchfunde an. In unserem Fall ist das ganz simpel „rm -rf“. Die geschweiften Klammern „{ }“ stehen dabei als Platzhalter für die gefundenen Dateien bzw. Ordner. Das Plus „+“ gibt an, dass „{ }“ der letzte Parameter des auszuführenden Befehls ist. Eine Ausgabe hat das Kommando leider nicht. Das Ergebnis kann aber anschließend durch nochmaliges Ausführen des ersten Befehls überprüft werden. Auch hier sollte dann ein leeres Ergebnis erscheinen, welches besagt, dass es keine Unterordner mehr mit eurer Suchphrase gibt.
Durch dieses einfache Kommando sind wir nun in der Lage, Unterordner mit identischem Namen zu finden und zu löschen. Ich denke diesen Befehl kann man definitiv des Öfteren mal gebrauchen.
Tipps & Tricks
Ihr wollt euch mehr mit Themen rund um Linux, Ubuntu und Co. beschäftigen? Dann stöbert doch mal durch folgende Kategorien:
Ich bin beruflich Consultant für Datacenter-Netzwerke. Da ich aber durch und durch IT’ler bin, beschäftige ich mich auch im Privaten viel mit Technik, Smart Home und Automatisierung.
Mit meinen Beiträgen möchte ich euch helfen, in dieser schnelllebigen Welt der Technik etwas Licht ins Dunkle zu bringen.