GNU/Linux >> Znalost Linux >  >> Linux

Zkopírujte konkrétní typy souborů při zachování struktury adresářů v systému Linux

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/ umístění a zkopírujte je do ostechnix/~/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.


Linux
  1. Linux – Jak lze zkontrolovat informace o struktuře adresářů souboru Unix/linux?

  2. Jak zkopírovat adresář v příkazovém řádku Linuxu [Tip pro začátečníky]

  3. 6 Příklady příkazů mv pro přesun nebo přejmenování souborů a adresářů systému Linux

  1. Jak odstranit (smazat) soubor nebo adresář v Linuxu

  2. Linuxový příkaz cp

  3. linuxový příkaz k vyprázdnění všech souborů v adresáři

  1. Jak zkopírovat soubor do více adresářů v Linuxu

  2. Linux Tail Command

  3. Linux Touch Command