GNU/Linux >> Znalost Linux >  >> Linux

Jak kopírovat soubory v Linuxu a Unixu? 10 cp Příklady příkazů

cp je jedním ze základních příkazů v Unixu. Již víte, že se používá ke kopírování jednoho nebo více souborů nebo adresářů ze zdroje do cíle.

I když je tento tutoriál pro začátečníky, je také užitečné, aby si každý rychle prošel různé možnosti příkazu cp pomocí několika praktických příkladů.

I když příkaz cp používáte neustále, pravděpodobně pro vás jeden nebo více příkladů vysvětlených níže může být nový.

Obecná forma příkazu copy:

cp [option] source destination

1. Zkopírujte soubor nebo adresář ze zdroje do cíle

Chcete-li zkopírovat soubor, musíte příkazu copy předat zdroj a cíl. Následující příklad zkopíruje soubor z project/readme.txt do projectbackup/readme-new.txt

$ cp project/readme.txt projectbackup/readme-new.txt

$ cd projectbackup/

$ ls
readme-new.txt

Pokud chcete zkopírovat soubor z jedné složky do druhé se stejným názvem, stačí pouze název cílového adresáře, jak je uvedeno níže.

$ cp project/readme.txt projectbackup/

$ cd projectbackup/

$ ls
readme.txt

Adresář (a veškerý jeho obsah) lze zkopírovat ze zdroje do cíle pomocí rekurzivní volby -r, jak je uvedeno níže:

$ ls project
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

$ cp -r project/ backup/

$ ls backup
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

2. Zkopírujte více souborů nebo adresářů

Můžete zkopírovat více než jeden soubor ze zdroje do cíle, jak je znázorněno níže:

$ cd src/
$ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/

Pokud mají zdrojové soubory společný vzor, ​​použijte zástupné znaky, jak je uvedeno níže. V tomto příkladu se všechny soubory rozšíření c zkopírují do adresáře /home/thegeekstuff/projectbackup/src/.

$ cp *.c /home/thegeekstuff/projectbackup/src/

Zkopírujte více adresářů, jak je uvedeno níže.

$ cd project/

$ cp -r src/ bin/ /home/thegeekstuff/projectbackup/

3. Zálohujte před kopírováním do cíle

V případě, že cílový soubor již existuje se stejným názvem, pak vám cp umožní zálohovat cílový soubor před jeho přepsáním.

V tomto příkladu soubor readme.txt existuje v adresáři project/ i projectbackup/ a při jeho kopírování z project/ do projectbackup/ je existující soubor readme.txt zálohován, jak je znázorněno níže:

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp --backup readme.txt  /home/thegeekstuff/projectbackup/

Stávající soubor byl přesunut do readme.txt~ a nový soubor byl zkopírován jako readme.txt, jak je uvedeno níže.

$ cd /home/thegeekstuff/projectbackup/
$ ls -l
-rw-r--r-- 1 bala geek 1020 Jan  8 13:36 readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt~

Když mluvíme o zálohování, je důležité, abyste pochopili, jak příkaz rsync funguje pro efektivní zálohování souborů.

4. Zachovejte odkazy při kopírování

Když spustíte příkaz cp, pokud je zdrojem soubor odkazu, zkopíruje se skutečný soubor, nikoli soubor odkazu. V případě, že chcete pouze zkopírovat odkaz tak, jak je, zadejte volbu -d, jak je uvedeno níže:

Následující ukazuje, že bez volby -d zkopíruje soubor (a ne odkaz):

$ cd project/bin

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 13:59 startup.sh -> ../test/startup.sh

$ cp startup.sh /home/thegeekstuff/projectbackup/bin/

$ cd /home/thegeekstuff/projectbackup/bin/

$ ls -l
-rw-r--r--  1 root root       102 Jan  8 14:02 startup.sh

Chcete-li zachovat odkaz při kopírování, proveďte následující:

$ cd project/bin

$ cp -d startup.sh /home/thegeekstuff/projectbackup/bin/

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 14:10 startup.sh -> ../test/startup.sh

5. Nepřepisujte existující soubor

Pokud chcete kopírovat pouze v případě, že cílový soubor neexistuje, použijte volbu -n, jak je uvedeno níže. Tím se nepřepíše stávající soubor a příkaz cp se vrátí s úspěšným ukončovacím kódem, jak je uvedeno níže:

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp -n readme.txt /home/thegeekstuff/projectbackup/bin/

$ echo $?
0

Jak vidíte níže, cílový soubor nebyl přepsán.

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

6. Před přepsáním potvrdit (interaktivní režim)

Když použijete volbu -i, požádá o potvrzení před přepsáním souboru, jak je ukázáno níže.

$ cp -i readme.txt /home/thegeekstuff/projectbackup/
cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y

7. Vytvořte pevný odkaz na soubor (místo kopírování)

Když spustíte příkaz cp, je možné vytvořit pevný odkaz na soubor (místo kopírování souboru). Následující příklad vytvoří pevný odkaz na soubor sample.txt do adresáře test/,

$ ls -li sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -l sample.txt test/ 

$ ls -li test/sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Jak je vidět výše, test/sample.txt je pevně propojený soubor se souborem sample.txt a inode obou souborů jsou stejné.

8. Vytvořit měkký odkaz na soubor nebo adresář (místo kopírování)

Když spustíte příkaz cp, je možné vytvořit měkký odkaz na soubor nebo adresář. V následujícím příkladu se pro libFS.so.6.0.0 vytvoří symbolický odkaz jako libFS.so,

# cd /usr/lib/

# ls -l libFS.so.6.0.0
-rw-r--r-- 1 root root 42808 Nov 19  2010 libFS.so.6.0.0

# cp -s libFS.so.6.0.0 libFS.so

# ls -l libFS.so
lrwxrwxrwx 1 root root 14 Jan  9 20:18 libFS.so -> libFS.so.6.0.0

9. Zachovat atributy souboru nebo adresáře při kopírování

Pomocí volby -p můžete zachovat vlastnosti souboru nebo adresáře, jak je ukázáno níže:

$ ls -l sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -p sample.txt test/ 

$ ls -l test/sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Je také možné zachovat pouze požadované vlastnosti, jako je režim, vlastnictví, časová razítka atd.

Následující příklad zachovává režim souboru při jeho kopírování:

$ cp --preserve=mode sample.txt test/

10. Kopírujte pouze v případě, že zdrojový soubor je novější než cílový nebo chybí

Kopírování u malého souboru nezabere mnoho času, ale při kopírování velkého souboru to může trvat značnou dobu. Při kopírování velkého souboru se tedy možná budete chtít ujistit, že to uděláte pouze tehdy, když je zdrojový soubor novější než cílový soubor, nebo když cílový soubor chybí, pomocí volby -u, jak je uvedeno níže.

V tomto příkladu budou dva soubory LICENSE a readme.txt zkopírovány z projektu/ do projectbackup/. Soubor LICENSE však již existuje v adresáři projectbackup/ a je novější než soubor v adresáři project/.

$ cd project/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek 108 Jan  8 13:14 LICENSE
-rw-r--r-- 1 bala geek 32 Jan  8 13:16 readme.txt

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
ls: cannot access readme.txt: No such file or directory
-rw-r--r-- 1 root root 112 Jan  9 20:31 LICENSE

V tomto příkladu tedy není potřeba znovu kopírovat LICENČNÍ soubor do adresáře projectbackup/. O to se automaticky postará příkaz cp, pokud použijete volbu -u, jak je uvedeno níže. V níže uvedeném příkladu byl zkopírován pouze soubor readme.txt, jak je označeno časovým razítkem na souboru.

$ cp -u -v LICENSE readme.txt  /home/thegeekstuff/projectbackup/
`readme.txt' -> `/home/thegeekstuff/projectbackup/readme.txt'

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek  112 Jan  9 20:31 LICENSE
-rw-r--r-- 1 bala geek   32 Jan  9 22:17 readme.txt

Linux
  1. Jak komprimovat soubory a adresáře v systému Linux (s příklady)

  2. Jak komprimovat a dekomprimovat soubory v Linuxu

  3. Jak používat příkaz Rsync v linuxu?

  1. Jak najít soubory pomocí příkazu fd v Linuxu

  2. Příklady příkazů Linux Objcopy pro kopírování a překlad objektových souborů

  3. 10 příkladů příkazů Cat pro správu souborů v systému Linux / UNIX

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak používat Linux Cat Command (s příklady)

  3. Příklady příkazů dd v Linuxu