Reduzieren Sie ein verschachteltes Verzeichnis und eine Dateihierarchie über die Befehlszeile von Mac OS X

Mussten Sie jemals eine Verzeichnisstruktur reduzieren, indem Sie den gesamten Dateiinhalt aus den Unterverzeichnissen eines Verzeichnisses in einen einzigen Ordner verschieben? Während Sie dies manuell tun können, indem Sie Dateien und Ordner aus dem Dateisystem von Mac OS X oder Linux verschieben, ist es eine schnellere Option, zur Befehlszeile zu wechseln. Vielleicht haben Sie an einer Stelle eine verschachtelte Hierarchie von Verzeichnissen erstellt, die Sie nun rückgängig machen müssen, indem Sie alle Dateien aus diesen verschachtelten Ordnern in ein einzelnes Verzeichnis zurückverlagern, oder vielleicht möchten Sie eine Verzeichnisstruktur vereinfachen, aus welchem ​​Grund auch immer Trick funktioniert ganz gut.


Die Verwendung der Befehlszeile zur Verflachung von Dateien und Verzeichnisstrukturen ist offensichtlich am besten fortgeschrittenen Benutzern vorbehalten, die mit der Verwendung des Terminals im Allgemeinen vertraut sind, wenn dies Sie nicht beschreibt, die manuelle Durchführung über Finder oder die Verwendung der Mac Automator App eine ähnliche Automatisierung von Dateisystemaktivitäten erreichen. Wir konzentrieren uns hier jedoch auf das Reduzieren von Verzeichnissen von der Befehlszeile aus.

Beispiel für das Reduzieren eines verschachtelten Dateiverzeichnisses

Um besser zu verstehen, was wir erreichen möchten, nehmen wir eine Beispiel-imaginäre Verzeichnisstruktur namens TestDirectory, die sich in einem Benutzer-Home-Ordner befindet. In diesem Beispiel enthält TestDirectory Unterordner wie SubDirectory1, SubDirectory2, SubDirectory3 usw., jeweils mit Dateien in diesen jeweiligen Ordnern. Was wir hier machen wollen, ist die Verflachung der Verzeichnisstruktur, indem alle Dateien von SubDirectory (X) in das übergeordnete Verzeichnis "TestDirectory" verschoben werden. Das anfängliche Verzeichnis und der Inhalt, die rekursiv mit der Datei angezeigt werden, könnten in etwa so aussehen:

$ find ~/TestDirectory/ -type f
~/TestDirectory/rooty.jpg
~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg
~/TestDirectory/SampleDirectory1/alphabeta-tool.jpg
~/TestDirectory/SampleDirectory2/test-tools.jpg
~/TestDirectory/SampleDirectory3/test-png.jpg
~/TestDirectory/SampleDirectory3/test1.jpg
~/TestDirectory/SampleDirectory3/test2.jpg

Um den Inhalt dieses Verzeichnisses und Unterverzeichnisses wieder in den Ordner TestDirectory zu reduzieren, verwenden Sie die folgende Befehlszeichenfolge:

find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

Nachdem der Inhalt des Verzeichnisses verflacht wurde, sollte es wie folgt aussehen:

~/TestDirectory/rooty.jpg
~/TestDirectory/beta-tool-preview.jpg
~/TestDirectory/alphabeta-tool.jpg
~/TestDirectory/test-tools.jpg
~/TestDirectory/test-png.jpg
~/TestDirectory/test1.jpg
~/TestDirectory/test2.jpg

Beachten Sie, dass die Unterverzeichnisse weiterhin existieren, sie werden nur leer sein. Sinn ergeben? Wenn nicht, oder wenn das nicht zeigt, was Sie erreichen möchten, möchten Sie wahrscheinlich kein Verzeichnis reduzieren, vielleicht möchten Sie eine dedizierte Datei zusammenführen oder verwenden, um eine komplexe Kopie an anderer Stelle zu erstellen.

Reduzieren einer Verzeichnisstruktur und einer geschachtelten Dateihierarchie mit der Befehlszeile

Bereit zum Fortfahren? Die Befehlszeichenfolge, mit der wir eine Verzeichnisstruktur reduzieren und alle Dateien aus Unterverzeichnissen in die Basis des Zielverzeichnisses verschieben, lautet wie folgt:

find [DIRECTORY] -mindepth 2 -type f -exec mv -i '{}' [DIRECTORY] ';'

Ersetzen Sie [DIRECTORY] durch das Verzeichnis Ihrer Wahl, um es zu reduzieren, wie im obigen Beispiel gezeigt.

Ja, das Verzeichnis wird zweimal in der Befehlszeichenfolge angezeigt. Beim ersten Mal wird das Verzeichnis gesucht, um die Unterverzeichnisse zu reduzieren, beim zweiten Mal wird es als Ziel für die gefundenen Elemente verwendet.

Seien Sie mit dem angegebenen Ziel genau, denn dies ist nicht umkehrbar (na ja, zumindest ohne viel manuelle Arbeit von Ihnen), also tun Sie das nur, wenn Sie absolut sicher sind, dass Sie alle Dateien in den Zielverzeichnissen unterordnen wollen Verzeichnisse zurück zum Zielstammordner.

Wie bereits erwähnt, können Sie dies auch im Finder von OS X tun oder zumindest die Datei- und Ordneränderungen im Finder beobachten. Option + Klick auf die kleinen Pfeile in der Listenansicht öffnet alle Unterverzeichnisse und zeigt die Ordnerhierarchie wie folgt:

Nachdem ich mit einer Vielzahl von Bash- und Zsh-Alternativen herumgespielt hatte, wurde dieser praktische Trick von einem Kommentator auf StackExcange verlassen und es wurde am Ende die einfachste und kompatibelste Methode. Wenn Sie eine bessere Möglichkeit kennen, ein verschachteltes Verzeichnis zu glätten, lassen Sie es uns in den Kommentaren wissen!