Maak een geneste directory plat & Bestandshiërarchie vanaf de opdrachtregel van Mac OS X
Heeft u ooit een directorystructuur moeten afvlakken, waarbij alle bestandsinhoud van onderliggende mappen van een directory naar een enkele map moest worden verplaatst? Hoewel u dit handmatig kunt doen door bestanden en mappen van het bestandssysteem van Mac OS X of Linux te verplaatsen, is een snellere optie om naar de opdrachtregel te gaan. Misschien heb je op een gegeven moment een geneste hiërarchie van mappen gemaakt die je nu ongedaan moet maken door alle bestanden uit die geneste mappen te verplaatsen en terug naar een enkele map, of misschien wil je een mappenstructuur vereenvoudigen, wat de reden ook is, dit truc werkt best goed.
Het gebruik van de opdrachtregel om bestanden en mapstructuren af te vlakken, is natuurlijk het beste voorbehouden aan geavanceerde gebruikers die vertrouwd zijn met het gebruik van terminal in het algemeen. Als dat niet van toepassing is, overweeg dan om het handmatig te doen via Finder , of gebruik de Mac Automator-app om vergelijkbare automatisering van bestandssysteemactiviteiten uit te voeren. We concentreren ons hier echter op het afvlakken van mappen vanaf de opdrachtregel.
Voorbeeld van het afvlakken van een geneste bestandsmap
Om beter te begrijpen wat we proberen te bereiken, nemen we een voorbeeld van een denkbeeldige directorystructuur genaamd TestDirectory die zich in een thuismap van een gebruiker bevindt. In dit voorbeeld bevat TestDirectory submappen zoals SubDirectory1, SubDirectory2, SubDirectory3, enz., elk met bestanden in die respectievelijke mappen. Wat we hier willen doen, is de directorystructuur afvlakken door alle bestanden van SubDirectory(X) naar de bovenliggende directory "TestDirectory" te verplaatsen.De initiële map en inhoud die recursief wordt weergegeven met de kan er ongeveer zo uitzien:
$ zoek ~/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
Om deze directory en de inhoud van de subdirectory weer af te vlakken 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, zou het er als volgt uit moeten zien:
~/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 zijn alleen leeg. Zin? Als dat niet het geval is, of als dat niet laat zien wat u wilt bereiken, wilt u waarschijnlijk helemaal geen directory afvlakken, misschien wilt u samenvoegen of dito gebruiken om een complexe kopie naar elders te maken.
Een mapstructuur en geneste bestandshiërarchie afvlakken met de opdrachtregel
Klaar om verder te gaan? De opdrachtreeks die we gaan gebruiken om een mappenstructuur af te vlakken en alle bestanden van submappen naar de basis van de doelmap te verplaatsen, is als volgt:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Vervang door de map van uw keuze om af te vlakken, zoals aangetoond in het bovenstaande voorbeeld.
Ja, de map verschijnt twee keer in de opdrachtreeks, de eerste keer wordt de map doorzocht om submappen af te vlakken en de tweede keer als de bestemming voor de gevonden items.
Wees nauwkeurig met de opgegeven bestemming, want deze is niet omkeerbaar (nou ja, in ieder geval zonder veel handmatig werk van jouw kant), dus doe dit alleen als je absoluut zeker weet dat je wilt verhuizen alle bestanden in de doelmappen onderliggende mappen terug naar de doelhoofdmap.
Zoals eerder vermeld, zou je dit ook kunnen doen in de Finder van OS X, of op zijn minst de bestands- en mapwijzigingen in de Finder kunnen observeren. Option+klikken op de kleine pijltjes in de lijstweergave opent alle submappen, waarbij de maphiërarchie als volgt wordt weergegeven:
Na wat spelen met verschillende bash- en zsh- alternatieven, werd deze handige truc achtergelaten door een commentator op StackExcange en bleek het de gemakkelijkste en meest compatibele methode te zijn. Als je een betere manier weet om een geneste map af te vlakken, laat het ons dan weten in de reacties!