Udglat en indlejret mappe & filhierarki fra kommandolinjen i Mac OS X

Anonim

Har du nogensinde haft brug for at udjævne en mappestruktur og flytte alt filindhold fra underordnede mapper til en enkelt mappe? Selvom du kan gøre dette manuelt ved at flytte rundt på filer og mapper fra filsystemet i Mac OS X eller Linux, er en hurtigere mulighed at vende sig til kommandolinjen. Måske har du på et tidspunkt oprettet et indlejret hierarki af mapper, som du nu skal fortryde ved at flytte alle filer ud af de indlejrede mapper og tilbage til en enkelt mappe, eller måske søger du at forenkle en mappestruktur, uanset årsagen, dette trick virker ret godt.

At bruge kommandolinjen til at udføre fladning af filer og mappestrukturer er naturligvis bedst forbeholdt avancerede brugere, der er fortrolige med at bruge terminal generelt, hvis det ikke beskriver dig, så overvej at gøre det manuelt via Finder , eller bruge Mac Automator-appen til at udføre lignende automatisering af filsystemaktiviteter. Vi fokuserer dog på mappeudjævning fra kommandolinjen her.

Eksempel på udfladning af en indlejret filmappe

For bedre at forstå, hvad vi forsøger at opnå, lad os tage et eksempel på en imaginær mappestruktur kaldet TestDirectory, der ligger i en brugerhjemmemappe. I dette eksempel indeholder TestDirectory undermapper som SubDirectory1, SubDirectory2, SubDirectory3 osv., hver med filer i de respektive mapper. Det, vi søger at gøre her, er at udjævne mappestrukturen ved at flytte alle filer fra SubDirectory(X) til den overordnede mappe "TestDirectory".Den indledende mappe og indholdet vist rekursivt med den kunne se sådan ud:

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

For at flade indholdet af denne mappe og undermappe ud tilbage til TestDirectory-mappen, skal du bruge følgende kommandostreng:

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

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

Bemærk undermapperne vil stadig eksistere, de vil bare være tomme. Giver mening? Hvis ikke, eller hvis det ikke demonstrerer, hvad du ønsker at opnå, ønsker du sandsynligvis slet ikke at udjævne en mappe, måske søger du at flette eller bruge ditto til at lave en kompleks kopi til andre steder.

Fladning af en mappestruktur og indlejret filhierarki med kommandolinjen

Klar til at fortsætte? Kommandostrengen, vi skal bruge til at udjævne en mappestruktur og flytte alle filer fra undermapper til bunden af ​​målmappen, er som følger:

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

Erstat med den mappe efter eget valg, der skal fladtes, som vist i eksemplet ovenfor.

Ja, biblioteket vises to gange i kommandostrengen, første gang søges i biblioteket for at udjævne undermapper af, og anden gang som destination for de fundne elementer.

Vær præcis med den angivne destination, for denne er ikke reversibel (nå, i hvert fald uden en masse manuelt arbejde fra din side), så gør kun dette, hvis du er helt sikker på, at du vil flytte alle filerne i målmappernes underordnede mapper tilbage til målrodmappen.

Som før nævnt kan du også gøre dette i Finder i OS X eller i det mindste observere fil- og mappeændringerne i Finder. Option+klik på de små pile i listevisningen åbner alle undermapper og viser mappehierarkiet som dette:

Efter at have rodet med en række forskellige bash- og zsh- alternativer, blev dette praktiske trick efterladt af en kommentator på StackExcange, og det endte med at blive den nemmeste og mest kompatible metode. Hvis du kender en bedre måde at flade en indlejret mappe, så lad os det vide i kommentarerne!

Udglat en indlejret mappe & filhierarki fra kommandolinjen i Mac OS X