cp serve a copiare file e cartelle da un punto all'altro del file system. Dopo aver imparato a creare directory e file vuoti, è il momento di duplicare quelli che esistono già: per fare un backup, per provare una modifica senza rischi, per spostare dati da un disco all'altro.
Cos'è
cp è l'abbreviazione di copy, "copia". Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/cp), presente su qualsiasi distribuzione GNU/Linux.
Cosa fa
Crea un duplicato di uno o più file, oppure di un'intera directory con tutto il suo contenuto. L'originale resta dov'è: cp non lo modifica né lo sposta. In caso di successo non stampa nulla.
Un punto importante: se la destinazione esiste già, cp la sovrascrive senza chiedere conferma, a meno che tu non usi le opzioni apposite.
Come si usa
Le due sintassi principali:
$ cp [opzioni] origine destinazione
$ cp [opzioni] origine... directory/Nella prima copi un elemento dandogli un nuovo nome o percorso; nella seconda copi uno o più elementi dentro una directory esistente.
Esempio 1: copiare un file
$ cp appunti.txt appunti_copia.txt
$ ls
appunti.txt appunti_copia.txtEsempio 2: copiare un file in un'altra directory
$ cp appunti.txt backup/
$ ls backup
appunti.txtIl file mantiene il suo nome. Se vuoi cambiarlo, scrivilo dopo la barra: cp appunti.txt backup/appunti_2026.txt.
Esempio 3: copiare più file insieme
L'ultimo argomento è sempre la destinazione, che deve essere una directory:
$ cp bozza1.txt bozza2.txt bozza3.txt backup/
$ cp *.txt backup/Nel secondo comando il carattere jolly * viene espanso dalla shell in tutti i file che finiscono per .txt.
Esempio 4: copiare una directory con -r
Per copiare una cartella serve l'opzione -r (recursive), altrimenti cp la ignora:
$ cp Documenti Documenti_backup
cp: -r non specificato; directory 'Documenti' omessa
$ cp -r Documenti Documenti_backup
$ ls
Documenti Documenti_backupEsempio 5: copia fedele con -a
L'opzione -a (archive) copia ricorsivamente mantenendo permessi, proprietari, date e link simbolici. È la scelta giusta per i backup:
$ cp -a /var/www/html /home/enzo/backup_sitoCon un cp -r semplice, invece, i file copiati avrebbero la data di copia e i permessi filtrati dalla tua umask.
Esempio 6: chiedere conferma prima di sovrascrivere con -i
$ cp -i appunti.txt backup/
cp: sovrascrivere 'backup/appunti.txt'? nCon -n (no-clobber), invece, cp non sovrascrive mai i file esistenti e non chiede nulla.
Esempio 7: copiare solo i file più recenti con -u
$ cp -u *.txt backup/Con -u (update) vengono copiati solo i file che non esistono ancora nella destinazione o che sono più recenti di quelli presenti. Utile per aggiornare una cartella di backup senza ricopiare tutto.
Esempio 8: vedere cosa viene copiato con -v
$ cp -rv Documenti Documenti_backup
'Documenti' -> 'Documenti_backup'
'Documenti/relazione.txt' -> 'Documenti_backup/relazione.txt'
'Documenti/note.txt' -> 'Documenti_backup/note.txt'Esempio 9: una copia di sicurezza prima di modificare un file
Prima di toccare un file di configurazione, fanne una copia:
$ cp nginx.conf nginx.conf.bakCon la brace expansion della shell il comando si accorcia, perché la shell lo espande in cp nginx.conf nginx.conf.bak:
$ cp nginx.conf{,.bak}Esempio 10: uso negli script
Un backup giornaliero con la data nel nome della cartella:
#!/bin/bash
DATA=$(date +%Y-%m-%d)
DEST="$HOME/backup/Documenti_$DATA"
cp -a "$HOME/Documenti" "$DEST" && echo "Backup creato in $DEST"Il && fa stampare il messaggio solo se la copia è riuscita.
Opzioni utili
-r/-R: copia le directory in modo ricorsivo.-a: copia fedele (ricorsiva, con permessi, date, proprietari e link).-i: chiede conferma prima di sovrascrivere.-n: non sovrascrive mai i file esistenti.-u: copia solo se manca la destinazione o l'origine è più recente.-v: mostra ogni file copiato.-p: conserva permessi, proprietario e date (senza essere ricorsivo).-b: prima di sovrascrivere, crea una copia di backup del file di destinazione.
Attenzione a
- Sovrascrive in silenzio: se copi un file sopra uno con lo stesso nome, quello vecchio è perso. Nei casi dubbi usa
-io-n. - Le directory vogliono -r: senza l'opzione,
cple salta e ti avvisa con un messaggio d'errore. - Contenuto o cartella? Se la destinazione esiste già,
cp -r origine destinazionecreadestinazione/origine. Per copiare solo il contenuto di una cartella usacp -r origine/. destinazione/. - I file nascosti con l'asterisco:
cp -r origine/* destinazione/non copia i file che iniziano con il punto, perché il carattere jolly li ignora. Il punto finale diorigine/.li include. - Proprietario e permessi: senza
-ao-p, le copie appartengono a chi esegue il comando e hanno la data di copia. - Spazio e permessi: la copia occupa altro spazio sul disco, e servono il permesso di lettura sull'origine e di scrittura nella destinazione.
- Origine e destinazione uguali: copiare un file su sé stesso dà un errore (
sono lo stesso file).
Riepilogo
| Comando | Cosa fa |
|---|---|
cp file copia | Copia un file con un nuovo nome |
cp file dir/ | Copia un file dentro una directory |
cp *.txt dir/ | Copia tutti i file corrispondenti |
cp -r dir copia | Copia una directory e il suo contenuto |
cp -a dir copia | Copia fedele, ideale per i backup |
cp -i file dir/ | Chiede conferma prima di sovrascrivere |
cp -u *.txt dir/ | Copia solo i file nuovi o più recenti |
cp file{,.bak} | Crea al volo una copia di sicurezza |