GNU/Linux >> Linux Esercitazione >  >> Linux

Come copiare file in Linux e Unix? 10 cp Esempi di comandi

cp è uno dei comandi di base in Unix. Sai già che viene utilizzato per copiare uno o più file o directory dall'origine alla destinazione.

Sebbene questo tutorial sia per principianti, è anche utile per tutti rivedere rapidamente varie opzioni del comando cp usando alcuni esempi pratici.

Anche se utilizzi sempre il comando cp, probabilmente uno o più esempi spiegati di seguito potrebbero essere nuovi per te.

La forma generale del comando copy:

cp [option] source destination

1. Copia un file o una directory dall'origine alla destinazione

Per copiare un file, devi passare l'origine e la destinazione al comando di copia. L'esempio seguente copia il file da project/readme.txt a projectbackup/readme-new.txt

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

$ cd projectbackup/

$ ls
readme-new.txt

Se desideri copiare un file da una cartella a un'altra con lo stesso nome, è sufficiente solo il nome della directory di destinazione, come mostrato di seguito.

$ cp project/readme.txt projectbackup/

$ cd projectbackup/

$ ls
readme.txt

Una directory (e tutto il suo contenuto) può essere copiata dall'origine alla destinazione con l'opzione ricorsiva -r come mostrato di seguito:

$ 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. Copia più file o directory

Puoi copiare più di un file dall'origine alla destinazione come mostrato di seguito:

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

Se i file di origine hanno uno schema comune, utilizzare i caratteri jolly come mostrato di seguito. In questo esempio, tutti i file con estensione c vengono copiati nella directory /home/thegeekstuff/projectbackup/src/.

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

Copia più directory come mostrato di seguito.

$ cd project/

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

3. Eseguire il backup prima di copiare in una destinazione

Nel caso in cui il file di destinazione sia già presente con lo stesso nome, cp ti consente di eseguire il backup del file di destinazione prima di sovrascriverlo.

In questo esempio, il file readme.txt esiste sia nella directory project/ che in projectbackup/ e durante la copia da project/ a projectbackup/, viene eseguito il backup del file readme.txt esistente come mostrato di seguito:

$ 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/

Il file esistente è stato spostato in readme.txt~ e il nuovo file è stato copiato come readme.txt come mostrato di seguito.

$ 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~

Parlando di backup, è importante per te capire come funziona il comando rsync per eseguire il backup dei file in modo efficace.

4. Conserva i collegamenti durante la copia

Quando si esegue il comando cp, se l'origine è un file di collegamento, viene copiato il file effettivo e non il file di collegamento. Nel caso in cui desideri solo copiare il collegamento così com'è, specifica l'opzione -d come mostrato di seguito:

Quanto segue mostra che senza l'opzione -d, copierà il file (e non il collegamento):

$ 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

Per preservare il collegamento durante la copia, procedi come segue:

$ 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. Non sovrascrivere un file esistente

Se vuoi copiare solo quando il file di destinazione non esiste, usa l'opzione -n ​​come mostrato di seguito. Questo non sovrascriverà il file esistente e il comando cp restituirà con successo il codice di uscita come mostrato di seguito:

$ 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

Come vedi sotto, il file di destinazione non è stato sovrascritto.

$ cd projectbackup

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

6. Conferma prima di sovrascrivere (modalità interattiva)

Quando usi l'opzione -i, ti verrà chiesto di confermare prima di sovrascrivere un file come mostrato di seguito.

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

7. Crea un collegamento reale a un file (invece di copiarlo)

Quando si esegue il comando cp, è possibile creare un collegamento fisico del file (invece di copiare il file). L'esempio seguente crea il collegamento fisico per il file sample.txt nella directory 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

Come visto sopra, test/sample.txt è un file hard linkato al file sample.txt e l'inode di entrambi i file è lo stesso.

8. Crea un collegamento software a un file o una directory (invece di copiare)

Quando si esegue il comando cp, è possibile creare un collegamento software a un file oa una directory. Nell'esempio seguente, viene creato un collegamento simbolico per libFS.so.6.0.0 come 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. Conserva gli attributi del file o della directory durante la copia

Usando l'opzione -p, puoi preservare le proprietà di un file o di una directory come mostrato di seguito:

$ 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

È anche possibile preservare solo le proprietà richieste come modalità, proprietà, timestamp, ecc.

L'esempio seguente conserva la modalità di un file durante la copia:

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

10. Copia solo quando il file di origine è più recente della destinazione o manca

La copia non richiede molto tempo per un file di piccole dimensioni, ma potrebbe essere necessario molto tempo quando viene copiato un file di grandi dimensioni. Quindi, durante la copia di un file di grandi dimensioni, potresti voler assicurarti di farlo solo quando il file di origine è più recente del file di destinazione, o quando il file di destinazione manca usando l'opzione -u come mostrato di seguito.

In questo esempio, i due file LICENSE e readme.txt verranno copiati da project/ a projectbackup/. Tuttavia, il file LICENSE esiste già nella directory projectbackup/ ed è più recente di quello nella directory 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

Quindi, in questo esempio, non è necessario copiare nuovamente il file LICENSE nella directory projectbackup/. Questo viene gestito automaticamente dal comando cp, se usi l'opzione -u come mostrato di seguito. Nell'esempio seguente, solo il file readme.txt è stato copiato come indicato dal timestamp sul file.

$ 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. Come comprimere file e directory su Linux (con esempi)

  2. Come comprimere e decomprimere file in Linux

  3. Come usare il comando Rsync in Linux?

  4. Esempi di comandi Linux Objcopy per copiare e tradurre file oggetto

  5. dd Esempi di comandi in Linux

Come installare Rclone in Linux e Unix

Come copiare file in Linux usando il comando CP

Come copiare file e directory nel terminale Linux

Cat Command in Linux:esempi essenziali e avanzati

comando ls in Linux/UNIX

comando cp in Linux/UNIX