Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3092: Jak v Linuxu kopírovat soubory a složky? Naučte se cp

cp je základní příkaz v Linuxu pro kopírování souborů, stejně jako copy ve Windows. Ostatně je zkratka právě z oné delší verze. 

Funguje klasicky, tedy napíšete cp odkud kam a systém vytvoří kopii. V odkud je možné uvádět jméns souborů ale používat i zástupné znaky (* a ?) pro výběr více souborů. Pozor na to, že skryté soubory (ty co začínají tečkou) to bude ignorovat. 

Vtip s tečkovanými soubory je, že

  • cp -a zdroj/* cil/ # nekopíruje je
  • cp -a zdroj/. cil/ # je kopíruje
  • cp cp -a zdroj cil/ # je kopíruje

Základní příklady použití

Základní kopie jednoho souboru

cp foto.jpg /mnt/usb/

Více souborů do adresáře (ano, jako zdroj jde uvádět víc věcí, cíl je pak ten poslední)

cp *.png *.jpg /mnt/usb/obrazky/

Kopie včetně skrytých souborů (nepoužívat hvězdičku)

cp -a projekt/. /mnt/backup/projekt/

TIP: Chcete návod? V Linuxu prostě zkustei man cp. Na webu třeba v cp(1) — Linux manual page

Kopírování složek

Umí kopírovat i složky (tedy jejich obsah), ale tam musíte použít -r jako parametr. Tedy něco jako cp -r vychozislozka/ cilovaslozka/

MImochodem, místo -r se doporučuje používat -R. 

Hodit se alespíše může -a (-dR –preserve=all) což je kombinace rekurze (tedy obsahu složek) a zachování práv, vlastníka, časů, symlinků, ACL, xattr atd

Rekurzivní kopie adresáře (doporučeně -a)

cp -a projekt/ /mnt/backup/

Aby toho nebylo málo, tak je tu ještě –parents, které v cíli vytvoří i cestu. Tedy tu původní cestu ke zdroji, pro názornost:

cp –parents a/b/c.txt /backup/ → /backup/a/b/c.txt (tedy v /backup vytvoří ony složky)

Zachovat cestu (parents)

cp –parents src/app/config.yaml /backup/

“Synchronizace” pouze nových/novějších souborů

cp se v základní podobě dá použít pro zálohování/synchronizaci, ale tam je vhodné využít -u. Zajistí, že se budou kopírovat pouze novější soubory+ty co v cíli chybí  a ne tedy vše co ve výchozí složce máte. Pochopitelně tedy v kombinaci jako -ru

Kopie pouze novějších souborů (rychlé „přisypání“)

cp -a -u zdroj/ cil/

TIP: pokud chcete opravdu synchronizovat, naučte se používat rsync

Ochrana proti blbosti

cp prostě spustíte a ono kopíruje a klidně přepíše cokoliv, co v cílovém místě je a nebude se na nic ptát. Pokud chcete aby se ptalo, použijte -i (interaktivně).

Užitečné  je -n (no-clobber) které zajistí, že pokud v cíli už soubor existuje, nepřepíše ho. Opak je -f (force) s vynuceným přepsáním. 

Bezpečně – nepřepisuj existující

cp -a -n zdroj/ cil/

Šikovné je -b (–backup) kde případné přepsání vytvoří zároveň zálohu. Původní jméno souboru doplněné o příponu (tu lze určit pomocí –suffix)

Při přepisu dělej zálohu s příponou .bak

cp -a –backup –suffix=.bak zdroj.cfg /etc/zdroj.cfg

Podrobně vidět co se děje

Podobně užitečné je -v (verbose) kde probíhající cp bude vypisovat co kopíruje (odkud kam). 

Včetně atributů

Pokud chcete aby v cílovém podobě byly zachovány atributy (vlastnosti), tak použijte -p. Bez přidání budou mít kopie nový timestamp, vlastníka i mode podle toho kam kopírujete. S -p timestamp zůstane. Pro zachování vlastnictví bude třeba spouštět přes sudo (či jiný odpovídající spůsob)

Symlinky

Také dost důležité:

  • -d (kopíruj symlinky jako symlinky)
  • -L (následuj symlinky)
  • -P (nenásleduj).

Jde i nevytvářet kopie, ale vytvořit symlinky s pomocí -l (hardlinky), -s (symlinky). Což vám ale neudělá duplikát (kopii) ale jen “odkaz” na originál.