Obvykle kopírujeme soubory z jednoho umístění do jiného existujícího umístění pomocí příkazů jako cp
, rsync
a scp
atd. Pokud cílové umístění neexistuje, nejprve jej vytvoříme a poté zkopírujeme soubor do tohoto nově vytvořeného umístění. Až dosud jsem takto obvykle kopíroval soubory z jednoho umístění na druhé z příkazového řádku. Věděli jste, že můžeme zkopírovat soubor a vytvořit cílový adresář automaticky, pokud neexistuje? Ne? Žádný problém! V této příručce uvidíme, jak kopírovat soubory a vytvářet cílové adresáře současně pomocí jediného příkazu v Linuxu.
Upozorňujeme, že nemluvím o kombinaci dvou příkazů. Kdokoli by to mohl udělat například kombinací dvou příkazů, jak je uvedeno níže:
$ mkdir -p destination && cp source_file destination
Nejedná se však o jediný příkaz. Zde jsme použili dva příkazy, tj. mkdir
a cp
. Je to vlastně jednořádkový příkaz. Nyní mi dovolte ukázat, jak provést stejný úkol pouze pomocí jednoho příkazu.
Kopírujte soubory a vytvářejte cílové adresáře současně v Linuxu
Můžeme to udělat pomocí tří různých metod. Nejprve uvidíme, jak to udělat pomocí install
příkaz.
Metoda 1 – pomocí install
příkaz
install
příkaz zkopíruje soubory do libovolného umístění podle vašeho výběru v Linuxu. To je speciálně používáno pro tento účel sestavovacími systémy jako automake
. Je součástí GNU coreutils, takže jej nemusíte instalovat.
Chcete-li zkopírovat soubor a vytvořit cílový adresář ve stejném pomocí install
příkaz, jednoduše spusťte:
$ install -D source-file destination-directory
Příklad:
Následující příkaz zkopíruje soubor s názvem sk.txt
do cílového adresáře s názvem ostechnix
. Upozorňujeme, že cílový adresář neexistuje. Zkopírujeme soubor a vytvoříme cílový adresář současně s install
příkaz jako níže:
$ install -D sk.txt ostechnix/sk.txt
Ověřte, zda byl soubor zkopírován do ostechnix
adresář vypsáním jeho obsahu pomocí ls
příkaz:
$ ls ostechnix/
sk.txt
Vidět? Cílový adresář jsem předtím nevytvářel. Příkaz install vytvořil adresář automaticky a uložil do něj soubor.
Šikovné, že? Vskutku! Toto je jedna z užitečných funkcí install
příkaz. To lze použít ve skriptech shellu.
Tato metoda má několik omezení. Na konci cílového umístění musíte uvést název zdrojového souboru. Pokud nezadáte název souboru, install
příkaz jej nezkopíruje a zobrazí následující chybu:
$ install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory
Můžete kopírovat jeden soubor najednou. Neexistuje způsob, jak zkopírovat více souborů do více umístění pomocí install
příkaz.
Můžeme také kopírovat soubory a měnit vlastnictví, oprávnění současně pomocí install
příkaz, jak je popsáno v následující příručce.
- Jak kopírovat soubory a měnit vlastnictví a oprávnění současně
Další podrobnosti o příkazu install naleznete na jeho manuálové stránce.
$ man install
Metoda 2 – pomocí cp
příkaz
Obecně používáme cp
příkaz pro kopírování souborů z jednoho místa na druhé. cp
příkaz má volbu s názvem --parents
což nám umožňuje zkopírovat celou adresářovou strukturu zdrojového souboru a uložit jej do cíle.
Řekněme například sk.txt
soubor je uložen v ~/Downloads
adresář a chtěli jste jej zkopírovat do ~/Documents
adresář. Pokud zkopírujete soubor pomocí cp
příkaz z ~/Downloads
na ~/Documents
, soubor bude uložen v adresářové struktuře takto -> ~/Documents/Downloads/sk.txt
.
Udělejme to v reálném čase a uvidíme, co se stane.
$ cp --parents Downloads/sk.txt ~/Documents/
Nyní spusťte tree
příkaz ke kontrole ~/Documents
obsah adresáře:
$ tree Documents/
Documents/
└── Downloads
└── sk.txt
1 directory, 1 file
Pamatujte, že jsme nevytvořili žádné adresáře uvnitř ~/Documents
umístění. --parents
možnost cp
příkaz zachoval adresářovou strukturu zdrojového souboru.
Na rozdíl od install
nemusíte uvádět název souboru na konci cílového adresáře.
To přímo nesouvisí s naším tématem. Nicméně cp
příkaz vytvořil cílové adresáře automaticky, tj. zachoval adresářovou strukturu zdrojového souboru.
Metoda 3 – pomocí rsync
příkaz
Rsync
je ideálním řešením pro kopírování a zálohování dat mezi lokálními a vzdálenými adresáři. Chcete-li zkopírovat soubory a vytvořit cílové adresáře současně pomocí příkazu rsync, spusťte:
$ rsync sk.txt ostechnix/
Kde je adresář s názvem ostechnix
nemusí existovat. Rsync jej automaticky vytvoří a uloží do něj zdrojový soubor.
Z těchto tří příkazů preferuji install
příkaz. Protože mohu vytvořit vnořené adresáře (adresář v jiném adresáři) pomocí install
příkaz. cp
a rsync
příkazy mohou vytvořit pouze jeden adresář, pokud vím. Opravte mě, pokud se mýlím.
Související čtení:
- Jak zachovat vlastnictví a oprávnění k souborům při kopírování souborů nebo adresářů