Sloučit vnořený adresář & Hierarchie souborů z příkazového řádku systému Mac OS X
Potřebovali jste někdy sloučit strukturu adresářů a přesunout veškerý obsah souborů z podřízených složek adresářů do jediné složky? I když to můžete udělat ručně přesouváním souborů a složek ze souborového systému Mac OS X nebo Linuxu, rychlejší možností je přejít na příkazový řádek. Možná jste v jednu chvíli vytvořili vnořenou hierarchii adresářů, kterou nyní potřebujete vrátit zpět přesunutím všech souborů z těchto vnořených složek zpět do jednoho adresáře, nebo možná hledáte zjednodušení adresářové struktury, ať už je důvod jakýkoli. trik funguje docela dobře.
Použití příkazového řádku k provedení sloučení souborů a adresářových struktur je samozřejmě nejlépe vyhrazeno pro pokročilé uživatele, kteří jsou spokojeni s používáním terminálu obecně, pokud to nepopisuje vás, zvažte ruční použití pomocí Finderu nebo pomocí aplikace Mac Automator k provedení podobné automatizace činností systému souborů. Zde se však zaměřujeme na sloučení adresářů z příkazového řádku.
Příklad sloučení adresáře vnořených souborů
Abychom lépe porozuměli tomu, čeho se snažíme dosáhnout, vezměme si příklad imaginární adresářové struktury nazvané TestDirectory umístěné v domovské složce uživatele. V tomto příkladu obsahuje TestDirectory podsložky jako SubDirectory1, SubDirectory2, SubDirectory3 atd., z nichž každá obsahuje soubory v těchto příslušných složkách. To, co se zde snažíme udělat, je zploštit adresářovou strukturu a přesunout všechny soubory z SubDirectory(X) do nadřazeného adresáře „TestDirectory“.Počáteční adresář a obsah zobrazený rekurzivně s the by mohl vypadat nějak takto:
$ najít ~/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/Sample2.jpg3
Pro sloučení obsahu tohoto adresáře a podadresáře zpět do složky TestDirectory byste použili následující příkazový řetězec:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Po sloučení obsahu adresáře by měl vypadat takto:
~/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šimněte si, že podadresáře budou stále existovat, jen budou prázdné. Dávat smysl? Pokud ne, nebo pokud to nedemonstruje, čeho chcete dosáhnout, pravděpodobně nechcete adresář vůbec zploštit, možná chcete sloučit nebo použít totéž k vytvoření složité kopie jinam.
Zploštění adresářové struktury a hierarchie vnořených souborů pomocí příkazového řádku
Jste připraveni pokračovat? Příkazový řetězec, který použijeme ke sloučení struktury adresářů a přesunutí všech souborů z podadresářů do základny cílového adresáře, je následující:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Nahraďte adresářem, který chcete sloučit, jak je ukázáno v příkladu výše.
Ano, adresář se v příkazovém řetězci objeví dvakrát, poprvé je to adresář, který je prohledáván za účelem sloučení podadresářů a podruhé jako cíl pro nalezené položky.
Uveďte přesně zadaný cíl, protože to nelze vrátit zpět (no, alespoň bez velké manuální práce z vaší strany), takže to udělejte pouze tehdy, pokud jste si naprosto jisti, že se chcete přemístit všechny soubory v podřízených adresářích cílových adresářů zpět do cílové kořenové složky.
Jak již bylo zmíněno dříve, můžete to provést také ve Finderu OS X nebo alespoň sledovat změny souborů a složek ve Finderu. Option+kliknutí na malé šipky v zobrazení seznamu otevře všechny podadresáře a zobrazí hierarchii složek takto:
Po hraní s různými bash a zsh alternativami tento šikovný trik zanechal komentátor na StackExcange a nakonec se stal nejjednodušší a nejkompatibilnější metodou. Pokud znáte lepší způsob, jak zploštit vnořený adresář, dejte nám vědět v komentářích!