Aplatizați un director imbricat & Ierarhie de fișiere din linia de comandă a Mac OS X
Ați avut vreodată nevoie să aplatizați o structură de directoare, mutând tot conținutul fișierelor dintr-un foldere copii directoare într-un singur folder? Deși puteți face acest lucru manual, deplasând fișierele și folderele din sistemul de fișiere Mac OS X sau Linux, o opțiune mai rapidă este să apelați la linia de comandă. Poate că la un moment dat ați creat o ierarhie imbricată de directoare pe care acum trebuie să le anulați prin mutarea tuturor fișierelor din acele foldere imbricate și înapoi într-un singur director, sau poate că căutați să simplificați o structură de directoare, indiferent de motiv, acest lucru trucul funcționează destul de bine.
Folosirea liniei de comandă pentru a realiza aplatizarea fișierelor și a structurilor de directoare este, evident, cel mai bine rezervată utilizatorilor avansați care se simt confortabil cu utilizarea terminalului în general, dacă asta nu vă descrie, luați în considerare să o faceți manual prin Finder , sau folosind aplicația Mac Automator pentru a realiza automatizarea similară a activităților sistemului de fișiere. Totuși, aici ne concentrăm pe aplatizarea directoarelor din linia de comandă.
Exemplu de aplatizare a unui director de fișiere imbricate
Pentru a înțelege mai bine ce încercăm să realizăm, să luăm un exemplu de structură de directoare imaginară numită TestDirectory, situată într-un folder principal al utilizatorului. În acest exemplu, TestDirectory conține subfoldere precum SubDirectory1, SubDirectory2, SubDirectory3 etc, fiecare cu fișiere în acele foldere respective. Ceea ce căutăm să facem aici este aplatizarea structurii directoarelor, mutând toate fișierele din SubDirectory(X) în directorul părinte „TestDirectory”.Directorul inițial și conținutul afișat recursiv cu ar putea arăta cam așa:
$ găsi ~/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
Pentru a aplatiza acest director și conținutul subdirectorului înapoi în folderul TestDirectory, ați folosi următorul șir de comandă:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
După ce conținutul directorului a fost aplatizat, ar trebui să arate așa când este listat:
~/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
Rețineți că subdirectoarele vor exista în continuare, vor fi doar goale. Are sens? Dacă nu, sau dacă asta nu demonstrează ceea ce doriți să realizați, probabil că nu doriți să aplatizați deloc un director, poate că doriți să fuzionați sau să folosiți idem pentru a face o copie complexă în altă parte.
Aplatizarea unei structuri de director și a unei ierarhii de fișiere imbricate cu linia de comandă
Ești gata de a continua? Șirul de comandă pe care îl vom folosi pentru a aplatiza o structură de directoare și pentru a muta toate fișierele din subdirectoare la baza directorului țintă este următorul:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Înlocuiți cu directorul la alegere pentru a aplatiza, așa cum este demonstrat în exemplul de mai sus.
Da, directorul apare de două ori în șirul de comandă, prima dată este directorul căutat pentru a aplatiza subdirectoarele și a doua oară ca destinație pentru elementele găsite.
Fii precis cu destinația specificată, pentru că aceasta nu este reversabilă (ei bine, cel puțin fără multă muncă manuală din partea ta), așa că faci asta doar dacă ești absolut sigur că vrei să te muți toate fișierele din directoarele țintă directoarele copil înapoi în folderul rădăcină țintă.
Așa cum am menționat anterior, puteți face acest lucru și în Finder din OS X, sau cel puțin observați modificările fișierelor și folderelor în Finder. Opțiunea+clic pe săgețile mici din vizualizarea Listă deschide toate subdirectoarele, arătând ierarhia folderelor astfel:
După ce s-a jucat cu o varietate de alternative bash și zsh, acest truc la îndemână a fost lăsat de un comentator pe StackExcange și a ajuns să fie cea mai ușoară și compatibilă metodă. Dacă cunoașteți o modalitate mai bună de a aplatiza un director imbricat, spuneți-ne în comentarii!