Flatt a Nested Directory & File Hierarki fra kommandolinjen i Mac OS X
Har du noen gang hatt behov for å flate ut en katalogstruktur, flytte alt filinnhold fra undermapper i en katalog til én enkelt mappe? Mens du kan gjøre dette manuelt ved å flytte rundt filer og mapper fra filsystemet til Mac OS X eller Linux, er et raskere alternativ å gå til kommandolinjen. Kanskje du på et tidspunkt opprettet et nestet hierarki av kataloger som du nå må angre ved å flytte alle filene ut av de nestede mappene og tilbake til en enkelt katalog, eller kanskje du ønsker å forenkle en katalogstruktur, uansett årsak, dette trikset fungerer ganske bra.
Å bruke kommandolinjen for å utføre utjevning av filer og katalogstrukturer er åpenbart best reservert for avanserte brukere som er komfortable med å bruke terminal generelt, hvis det ikke beskriver deg, vurder å gjøre det manuelt gjennom Finder , eller bruke Mac Automator-appen for å oppnå lignende automatisering av filsystemaktiviteter. Vi fokuserer imidlertid på katalogutjevning fra kommandolinjen her.
Eksempel på flatting av en nestet filkatalog
For bedre å forstå hva vi prøver å oppnå, la oss ta et eksempel på en imaginær katalogstruktur k alt TestDirectory som ligger i en brukerhjemmemappe. I dette eksemplet inneholder TestDirectory undermapper som SubDirectory1, SubDirectory2, SubDirectory3 osv., hver med filer i de respektive mappene. Det vi ønsker å gjøre her er å flate ut katalogstrukturen, flytte alle filer fra SubDirectory(X) til den overordnede katalogen "TestDirectory".Den opprinnelige katalogen og innholdet som vises rekursivt med kan se omtrent slik ut:
$ finn ~/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/SampleDirectory
For å flate ut denne katalogen og underkataloginnholdet tilbake til TestDirectory-mappen, bruker du følgende kommandostreng:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Etter at kataloginnholdet er flatet ut, skal det se slik ut når det er oppført:
~/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
Vær oppmerksom på at underkatalogene fortsatt vil eksistere, de vil bare være tomme. Gir mening? Hvis ikke, eller hvis det ikke viser hva du ønsker å oppnå, vil du sannsynligvis ikke flate ut en katalog i det hele tatt, kanskje du ønsker å slå sammen eller bruke ditto for å gjøre en kompleks kopi til andre steder.
Flatte en katalogstruktur og nestet filhierarki med kommandolinjen
Klar til å fortsette? Kommandostrengen vi skal bruke for å flate ut en katalogstruktur og flytte alle filer fra underkataloger til bunnen av målkatalogen er som følger:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Erstatt med katalogen du ønsker å flate ut, som vist i eksempelet ovenfor.
…Vær nøyaktig med den angitte destinasjonen, for dette er ikke reversibelt (vel, i alle fall uten mye manuelt arbeid fra din side), så gjør dette bare hvis du er helt sikker på at du vil flytte alle filene i målkatalogene underordnede kataloger tilbake til målrotmappen.
Som nevnt før, kan du også gjøre dette i Finder i OS X, eller i det minste observere fil- og mappeendringene i Finder. Alternativ+klikk på de små pilene i listevisningen åpner alle underkataloger, og viser mappehierarkiet slik:
Etter å ha fiklet med en rekke bash- og zsh- alternativer, ble dette hendige trikset lagt igjen av en kommentator på StackExcange, og det endte opp med å være den enkleste og mest kompatible metoden. Hvis du vet om en bedre måte å flate ut en nestet katalog, gi oss beskjed i kommentarfeltet!