Maak een genestelde directory en bestandshiërarchie af vanaf de opdrachtregel van Mac OS X.

Hebt u ooit een directorystructuur moeten afvlakken, waarbij alle bestandsinhoud uit de onderliggende mappen van mappen naar een enkele map moet worden verplaatst? Hoewel u dit handmatig kunt doen door bestanden en mappen te verplaatsen vanuit het bestandssysteem van Mac OS X of Linux, is een snellere optie om naar de opdrachtregel te gaan. Misschien hebt u op een gegeven moment een geneste hiërarchie van mappen gemaakt die u nu moet ongedaan maken door alle bestanden uit die geneste mappen en terug in een enkele map te verplaatsen, of misschien wilt u een directorystructuur vereenvoudigen, ongeacht de reden, dit trick werkt best goed.


Het gebruik van de opdrachtregel om afvlakking van bestanden en mapstructuren te voltooien, is uiteraard het beste voorbehouden aan ervaren gebruikers die vertrouwd zijn met het gebruik van terminals in het algemeen, als dat niet u beschrijft, overweeg dit handmatig te doen met Finder of de Mac Automator-app te gebruiken om een vergelijkbare automatisering van bestandssysteemactiviteiten tot stand brengen. We concentreren ons echter op het afvlakken van mappen vanaf de opdrachtregel.

Voorbeeld van het afvlakken van een genest bestandsmap

Om beter te begrijpen wat we proberen te bereiken, laten we een voorbeeld nemen van een imaginaire mapstructuur met de naam TestDirectory in de hoofdmap van een gebruiker. In dit voorbeeld bevat TestDirectory submappen zoals SubDirectory1, SubDirectory2, SubDirectory3, enzovoort, elk met bestanden in die respectieve mappen. Wat we hier proberen te doen, is de mapstructuur afvlakken, waarbij alle bestanden van SubDirectory (X) naar de bovenliggende map "TestDirectory" worden verplaatst. De initiële directory en de inhoud die recursief wordt getoond met de kan er ongeveer zo uitzien:

$ 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

Als u deze map- en submapinhoud wilt leegmaken in de map TestDirectory, gebruikt u de volgende opdrachtreeks:

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

Nadat de inhoud van de map is afgevlakt, ziet het er als volgt uit:

~/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

Merk op dat de submappen nog steeds bestaan, ze zullen gewoon leeg zijn. Heb je zin? Zo niet, of als dat niet aangeeft wat je wilt bereiken, dan wil je waarschijnlijk helemaal geen directory plat maken, misschien wil je dit samenvoegen of gebruiken om een ​​complexe kopie naar elders te maken.

Een mappenstructuur en geneste bestandshiërarchie afvlakken met de opdrachtregel

Klaar om door te gaan? De opdrachtreeks die we gaan gebruiken om een ​​directorystructuur af te vlakken en alle bestanden van subdirectories naar de basis van de doelmap te verplaatsen, is als volgt:

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

Vervang [DIRECTORY] door de directory van uw keuze om af te vlakken, zoals aangetoond in het voorbeeld hierboven.

Ja, de map wordt twee keer weergegeven in de opdrachtreeks, de eerste keer dat de map wordt doorzocht om submappen van en de tweede keer af te vlakken als de bestemming voor de gevonden items.

Wees precies met de opgegeven bestemming, want dit is niet omkeerbaar (nou ja, in ieder geval zonder veel handmatig werk van jouw kant), dus doe dit alleen als je er absoluut zeker van bent dat je alle bestanden in de doeldirectory's wilt verplaatsen mappen terug naar de doel-hoofdmap.

Zoals eerder vermeld, kunt u dit ook doen in de Finder van OS X, of in ieder geval de wijzigingen in bestanden en mappen bekijken in de Finder. Optie + klikken op de kleine pijlen in de lijstweergave opent alle submappen en toont de mappenhiërarchie als volgt:

Na het spelen met een verscheidenheid aan bash en zsh alternatieven, werd deze handige truc achtergelaten door een commentator op StackExcange en het werd uiteindelijk de gemakkelijkste en meest compatibele methode. Als je een betere manier weet om een ​​geneste directory plat te maken, laat het ons dan weten in de comments!