Mag-flatten ng Nested Directory & File Hierarchy mula sa Command Line ng Mac OS X
Kailangan mo na bang i-flatten ang isang istraktura ng direktoryo, na inilipat ang lahat ng mga nilalaman ng file mula sa mga folder ng mga direktoryo sa isang solong folder? Bagama't maaari mong gawin ito nang manu-mano sa pamamagitan ng paglipat sa paligid ng mga file at folder mula sa file system ng Mac OS X o Linux, ang isang mas mabilis na opsyon ay ang lumiko sa command line. Marahil sa isang punto ay lumikha ka ng isang nested hierarchy ng mga direktoryo na kailangan mo na ngayong i-undo sa pamamagitan ng paglipat ng lahat ng mga file mula sa mga nested na folder at pabalik sa isang solong direktoryo, o marahil ay naghahanap ka upang gawing simple ang isang istraktura ng direktoryo, anuman ang dahilan, ito gumagana nang maayos ang trick.
Paggamit ng command line upang magawa ang pag-flatte ng mga file at mga istruktura ng direktoryo ay malinaw na pinakamahusay na nakalaan para sa mga advanced na user na komportable sa paggamit ng terminal sa pangkalahatan, kung hindi iyon naglalarawan sa iyo, isaalang-alang ang paggawa nito nang manu-mano sa pamamagitan ng Finder , o paggamit ng Mac Automator app upang magawa ang katulad na pag-automate ng mga aktibidad ng file system. Nakatuon kami sa pag-flatte ng direktoryo mula sa command line dito, gayunpaman.
Halimbawa ng Pag-flatte ng Nested File Directory
Upang mas maunawaan kung ano ang sinusubukan naming gawin, kumuha tayo ng isang halimbawa ng haka-haka na istraktura ng direktoryo na tinatawag na TestDirectory na matatagpuan sa isang folder ng Home ng user. Sa halimbawang ito, naglalaman ang TestDirectory ng mga subfolder tulad ng SubDirectory1, SubDirectory2, SubDirectory3, atbp, bawat isa ay may mga file sa mga kaukulang folder na iyon. Ang hinahanap naming gawin dito ay patagin ang istraktura ng direktoryo, inilipat ang lahat ng mga file mula sa SubDirectory(X) patungo sa parent directory na "TestDirectory".Ang unang direktoryo at mga nilalaman na ipinapakita nang pabalik-balik kasama ang ay maaaring magmukhang ganito:
$ hanapin ~/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
Upang i-flat ang direktoryo na ito at mga nilalaman ng subdirectory pabalik sa TestDirectory folder, gagamitin mo ang sumusunod na command string:
hanapin ang TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Pagkatapos ma-flatten ang mga nilalaman ng direktoryo, dapat ganito ang hitsura kapag nakalista:
~/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
Tandaan ang mga subdirectory ay iiral pa rin, magiging walang laman ang mga ito. May sense? Kung hindi, o kung hindi iyon nagpapakita kung ano ang gusto mong makamit, malamang na ayaw mong i-flatten ang isang direktoryo, marahil ay naghahanap ka upang pagsamahin o gamitin ang ditto upang gumawa ng kumplikadong kopya sa ibang lugar.
Pag-flatte ng Istruktura ng Direktoryo at Nested File Hierarchy gamit ang Command Line
Handa nang magpatuloy? Ang command string na gagamitin namin para patagin ang isang istraktura ng direktoryo at ilipat ang lahat ng mga file mula sa mga subdirectory patungo sa base ng target na direktoryo ay ang mga sumusunod:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Palitan ng direktoryo na gusto mong i-flatten, gaya ng ipinakita sa halimbawa sa itaas.
Oo, ang direktoryo ay lalabas nang dalawang beses sa command string, ang unang pagkakataon ay ang direktoryo na hinahanap upang patagin ang mga subdirectory ng, at ang pangalawang pagkakataon bilang ang destinasyon para sa mga nahanap na item.
Maging tumpak sa tinukoy na patutunguhan, dahil hindi ito mababaligtad (well, kahit na walang masyadong manu-manong trabaho sa iyong bahagi), kaya gawin lang ito kung talagang sigurado kang gusto mong lumipat lahat ng mga file sa mga target na direktoryo na mga direktoryo ng bata ay bumalik sa target na root folder.
Tulad ng nabanggit dati, maaari mo ring gawin ito sa Finder ng OS X, o kahit man lang obserbahan ang mga pagbabago sa file at folder sa Finder. Ang opsyon+pag-click sa maliliit na arrow sa List view ay magbubukas sa lahat ng mga subdirectory, na nagpapakita ng hierarchy ng folder na tulad nito:
Pagkatapos kalikutin ang iba't ibang mga alternatibong bash at zsh, ang madaling gamiting trick na ito ay iniwan ng isang nagkomento sa StackExcange at ito ang naging pinakamadali at pinakatugmang paraan. Kung alam mo ang isang mas mahusay na paraan upang i-flatten ang isang nested na direktoryo, ipaalam sa amin sa mga komento!