Reduzieren Sie ein verschachteltes Verzeichnis & Dateihierarchie von der Befehlszeile von Mac OS X
Mussten Sie jemals eine Verzeichnisstruktur glätten und alle Dateiinh alte aus den untergeordneten Ordnern 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, geht es schneller über die Befehlszeile. Vielleicht haben Sie irgendwann eine verschachtelte Hierarchie von Verzeichnissen erstellt, die Sie jetzt rückgängig machen müssen, indem Sie alle Dateien aus diesen verschachtelten Ordnern heraus und zurück in ein einzelnes Verzeichnis verschieben, oder vielleicht möchten Sie eine Verzeichnisstruktur vereinfachen, was auch immer der Grund dafür ist Trick funktioniert ganz gut.
Die Verwendung der Befehlszeile zum Abflachen von Dateien und Verzeichnisstrukturen ist offensichtlich am besten fortgeschrittenen Benutzern vorbeh alten, die mit der Verwendung von Terminal im Allgemeinen vertraut sind. Wenn Sie das nicht beschreibt, sollten Sie dies manuell über den Finder tun , oder verwenden Sie die Mac Automator-App, um eine ähnliche Automatisierung von Dateisystemaktivitäten zu erreichen. Wir konzentrieren uns hier jedoch auf die Verzeichnisreduzierung über die Befehlszeile.
Beispiel für das Reduzieren eines verschachtelten Dateiverzeichnisses
Um besser zu verstehen, was wir zu erreichen versuchen, nehmen wir ein Beispiel für eine imaginäre Verzeichnisstruktur namens TestDirectory, die sich in einem Home-Ordner eines Benutzers befindet. In diesem Beispiel enthält TestDirectory Unterordner wie SubDirectory1, SubDirectory2, SubDirectory3 usw., jeweils mit Dateien in diesen jeweiligen Ordnern. Was wir hier tun möchten, ist die Verzeichnisstruktur zu glätten und alle Dateien von SubDirectory(X) in das übergeordnete Verzeichnis „TestDirectory“ zu verschieben.Das anfängliche Verzeichnis und die Inh alte, die rekursiv mit dem angezeigt werden, könnten 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 Inh alt dieses Verzeichnisses und der Unterverzeichnisse zurück in den Ordner „TestDirectory“ zu reduzieren, würden Sie die folgende Befehlszeichenfolge verwenden:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Nachdem der Inh alt des Verzeichnisses reduziert wurde, sollte er wie folgt aussehen, wenn er aufgelistet wird:
~/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 sind nur leer. Sinn ergeben? Wenn nicht, oder wenn dies nicht zeigt, was Sie erreichen möchten, möchten Sie ein Verzeichnis wahrscheinlich überhaupt nicht glätten, vielleicht möchten Sie es zusammenführen oder dito verwenden, um eine komplexe Kopie an einen anderen Ort zu erstellen.
Verflachung einer Verzeichnisstruktur und verschachtelter Dateihierarchie mit der Befehlszeile
Bereit fortzufahren? Die Befehlszeichenfolge, die wir verwenden werden, um eine Verzeichnisstruktur zu glätten und alle Dateien aus Unterverzeichnissen an die Basis des Zielverzeichnisses zu verschieben, lautet wie folgt:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Ersetzen Sie durch das Verzeichnis Ihrer Wahl, um es zu reduzieren, wie im obigen Beispiel gezeigt.
Ja, das Verzeichnis erscheint zweimal in der Befehlszeichenfolge, das erste Mal ist das Verzeichnis, in dem Unterverzeichnisse reduziert werden, und das zweite Mal das Ziel für die gefundenen Elemente.
Seien Sie bei der Zielangabe genau, da dies nicht umkehrbar ist (zumindest ohne viel manuelle Arbeit Ihrerseits), also tun Sie dies nur, wenn Sie absolut sicher sind, dass Sie umziehen möchten alle Dateien in den Unterverzeichnissen der Zielverzeichnisse zurück in den 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 wir mit einer Vielzahl von bash- und zsh-Alternativen herumgespielt hatten, wurde dieser praktische Trick von einem Kommentator auf StackExcange hinterlassen und stellte sich schließlich als die einfachste und kompatibelste Methode heraus. Wenn Sie einen besseren Weg kennen, um ein verschachteltes Verzeichnis zu glätten, teilen Sie uns dies in den Kommentaren mit!