Před chvílí jsme se naučili, jak kopírovat určitý typ souborů z jednoho adresáře do druhého v Linuxu. Dnes uděláme totéž, ale zachováme také adresářovou strukturu. Tento stručný návod vysvětluje, jak kopírovat konkrétní typy souborů při zachování adresářové struktury v Linuxu. Zde jsem uvedl dva různé způsoby, jak toho dosáhnout. Stačí si vybrat kteroukoli, která vám vyhovuje.
Zkopírujte konkrétní typy souborů při zachování struktury adresářů v systému Linux
Představte si tento scénář.
Mám adresář s názvem "Linux" s různými typy souborů uloženými v různých podadresářích. Podívejte se na následující adresářovou strukturu:
$ tree Linux/ Linux/ ├── dir1 │ ├── English │ │ └── Kina - Can We Kiss Forever.mp3 │ ├── Instrumental │ │ └── Chill Study Beats.mp3 │ └── Tamil │ ├── Kannan Vanthu.mp3 │ └── yarenna.mp3 ├── dir2 │ ├── file.docx │ └── Raja Raja Chozan Naan.mp3 ├── dir3 │ ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3 │ └── pic.jpg └── dir4 ├── Aaruyirae.mp3 └── video.mp4 7 directories, 10 files

Vypište obsah adresáře pomocí stromového příkazu
Jak vidíte ve výše uvedené adresářové struktuře, Linux adresář má čtyři podadresáře, jmenovitě dir1 , adresář2 , adresář3 a dir4 . Soubor mp3 soubory jsou rozptýleny ve všech čtyřech podadresářích. Nyní chci zkopírovat všechny mp3 soubory do jiného adresáře s názvem "ostechnix" a také chci zachovat stejnou strukturu adresářů v cílovém adresáři.
Nejprve uvidíme, jak to udělat pomocí příkazu "find".
Metoda 1 – pomocí příkazů „find“ a „cp“ nebo „cpio“
Přejděte do zdrojového adresáře:
$ cd Linux/
A zkopírujte všechny typy souborů mp3 pomocí příkazu "najít":
$ find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
Pojďme rozebrat výše uvedený příkaz a uvidíme, co jednotlivé možnosti dělají.
- najít – příkaz k vyhledání souborů a složek v systémech podobných Unixu.
- tečka (.) - představuje, že zkopírujeme obsah z aktuálního adresáře.
- -name ‚*.mp3‘ – hledat soubory s příponou .mp3.
- -exec cp – spusťte příkaz „cp“ pro zkopírování souborů ze zdrojového do cílového adresáře.
- -rodiče - v případě potřeby vytvořte přechodné nadřazené adresáře, abyste zachovali nadřazenou adresářovou strukturu.
- \{\} – je automaticky nahrazeno názvem souboru nalezených pomocí příkazu „najít“. A složené závorky jsou upuštěny, aby je chránily před expanzí pomocí shellu v některých verzích příkazu "najít". Můžete také použít {} bez únikových znaků.
- ~/ostechnix – cílový adresář pro uložení odpovídajících souborů.
- \; – označuje, že příkazy, které mají být provedeny, jsou nyní dokončeny a že příkaz provést znovu při příštím zápase.
Tento příkaz vyhledá a zkopíruje všechny soubory typu mp3 z adresáře ~/Linux do adresáře ~/ostechnix. A také zachovává stejnou adresářovou strukturu v cílovém adresáři.
Můžete to ověřit pomocí příkazu "strom" na obou místech, jak je uvedeno níže.

Vypište obsah adresáře pomocí příkazu tree v Linuxu
Jak vidíte ve výše uvedeném výstupu, cílový adresář obsahuje pouze soubory mp3 a jeho adresářová struktura je stejná jako zdrojový adresář.
Pokud to děláte z nějakého jiného umístění, zadejte úplnou cestu ke zdrojovému adresáři, jak je uvedeno níže.
$ find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
Tento příkaz najde celý soubor v Linux/

Zkopírujte konkrétní typy souborů při zachování struktury adresářů v systému Linux
Pokud --rodiče nefunguje, můžete zkombinovat příkaz find s cpio příkaz ke kopírování souborů se zachováním adresářové struktury.
$ find . -name '*.mp3' | cpio -pdm ~/ostechnix
Tady,
- cpio - Příkaz pro kopírování souborů do az archivů.
- -p - Přečtěte si seznam názvů souborů ze standardního vstupu a zkopírujte je do určeného adresáře.
- -d - Vytvořte adresáře, kde je potřeba.
- -m - Zachovejte čas úpravy souboru.
Další podrobnosti naleznete na manuálových stránkách.
$ man find
$ man cp
$ man cpio
Doporučené čtení:
- Jak automaticky uspořádat podobný typ souborů do konkrétních složek
Metoda 2 – pomocí Rsync
Rsync je výkonný nástroj používaný do/z místních a vzdálených systémů. Chcete-li zkopírovat určitý typ souborů z jednoho adresáře do druhého při zachování nadřazené adresářové struktury, spusťte:
$ rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
Nebo,
$ rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
Tady,
- rsync - nástroj pro vzdálené (a místní) kopírování souborů.
- -a - režim archivace pro zachování téměř všeho (včetně symbolických odkazů, dat úprav, oprávnění k souborům, vlastníků atd.)
- -m, --prune-empty-dirs - odstranit prázdné adresáře ze stromu zdrojového kódu. Pokud chcete zahrnout prázdné adresáře, stačí tuto možnost z výše uvedeného příkazu odebrat.
- --include="*/" --include="*.mp3" --exclude="*" - Chcete-li zahrnout pouze určité soubory, musíte nejprve zahrnout tyto konkrétní soubory a poté vyloučit všechny ostatní soubory. V našem případě jsme zahrnuli soubory *.mp3 a vyloučili vše ostatní.
- ~/Linux - Zdrojový adresář.
- ~/ostechnix – Cílový adresář.
Ukázkový výstup:

Zkopírujte konkrétní typy souborů při zachování struktury adresářů pomocí Rsync v Linuxu
Další podrobnosti naleznete na manuálových stránkách.
$ man rsync
Doufám, že to pomůže.