Platta ut en kapslad katalog & filhierarki från kommandoraden i Mac OS X

Anonim

Har du någonsin behövt förenkla en katalogstruktur, flytta allt filinnehåll från en katalogs underordnade mappar till en enda mapp? Även om du kan göra detta manuellt genom att flytta runt filer och mappar från filsystemet i Mac OS X eller Linux, är ett snabbare alternativ att vända sig till kommandoraden. Kanske skapade du vid ett tillfälle en kapslad hierarki av kataloger som du nu måste ångra genom att flytta alla filer ut från de kapslade mapparna och tillbaka till en enda katalog, eller så kanske du vill förenkla en katalogstruktur, oavsett orsaken, detta tricket fungerar ganska bra.

Att använda kommandoraden för att åstadkomma utjämning av filer och katalogstrukturer är uppenbarligen bäst reserverat för avancerade användare som är bekväma med att använda terminal i allmänhet, om det inte beskriver dig, överväg att göra det manuellt via Finder , eller använda Mac Automator-appen för att utföra liknande automatisering av filsystemaktiviteter. Vi fokuserar dock på katalogutjämning från kommandoraden här.

Exempel på att platta en kapslad filkatalog

För att bättre förstå vad vi försöker åstadkomma, låt oss ta en imaginär katalogstruktur som heter TestDirectory som finns i en användarhemmapp. I det här exemplet innehåller TestDirectory undermappar som SubDirectory1, SubDirectory2, SubDirectory3, etc, var och en med filer i de respektive mappar. Vad vi vill göra här är att platta till katalogstrukturen, flytta alla filer från SubDirectory(X) till den överordnade katalogen "TestDirectory".Den initiala katalogen och innehållet som visas rekursivt med den kan se ut ungefär så här:

$ hitta ~/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/Sample2Directory

För att platta ut innehållet i katalogen och underkatalogen tillbaka till mappen TestDirectory använder du följande kommandosträng:

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

Efter att kataloginnehållet har plattats ut bör det se ut så här när det listas ut:

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

Observera att underkatalogerna fortfarande finns, de kommer bara att vara tomma. Vettigt? Om inte, eller om det inte visar vad du vill åstadkomma, vill du förmodligen inte platta till en katalog alls, kanske du funderar på att slå samman eller använda dito för att göra en komplex kopia till någon annanstans.

Flättning av en katalogstruktur och kapslad filhierarki med kommandoraden

Redo att fortsätta? Kommandosträngen vi ska använda för att platta till en katalogstruktur och flytta alla filer från underkataloger till basen av målkatalogen är följande:

find -mindepth 2 -typ f -exec mv -i '{}' ';'

Ersätt med den katalog du vill platta till, som visas i exemplet ovan.

Ja, katalogen visas två gånger i kommandosträngen, första gången är katalogen genomsökt för att platta underkataloger till, och andra gången som destination för de hittade objekten.

Var noggrann med den angivna destinationen, för detta är inte reversibelt (nåja, åtminstone utan mycket manuellt arbete från din sida), så gör bara detta om du är helt säker på att du vill flytta alla filer i målkatalogernas underordnade kataloger tillbaka till målrotmappen.

Som nämnts tidigare kan du också göra detta i Finder i OS X, eller åtminstone observera fil- och mappändringarna i Finder. Alternativ+klicka på de små pilarna i listvyn öppnar alla underkataloger och visar mapphierarkin så här:

Efter att ha pillat med en mängd olika bash- och zsh- alternativ lämnades detta praktiska trick av en kommentator på StackExcange och det slutade med att det var den enklaste och mest kompatibla metoden. Om du känner till ett bättre sätt att platta till en kapslad katalog, låt oss veta det i kommentarerna!

Platta ut en kapslad katalog & filhierarki från kommandoraden i Mac OS X