Come utilizzare il comando cp in modo efficace in Linux [14 esempi]


Breve: in questa guida facile da seguire, discuteremo alcuni esempi pratici del comando cp. Dopo aver seguito questa guida, gli utenti saranno in grado di copiare facilmente file e directory in Linux utilizzando l'interfaccia della riga di comando.

Come utenti Linux, interagiamo con la copia di file e directory. Certamente, possiamo utilizzare un file manager grafico per eseguire l'operazione di copia. Tuttavia, la maggior parte degli utenti Linux preferisce utilizzare il comando cp per la sua semplicità e la sua ricca funzionalità.

In questa guida per principianti, impareremo a conoscere il comando cp. Come suggerisce il nome, il comando cp viene utilizzato per copiare file e directory in un determinato percorso.

In questa guida, capiremo l'utilizzo del comando cp utilizzando esempi pratici che possono essere utilizzati quotidianamente.

Allora, cominciamo.

Sommario

Sintassi del comando Cp

La sintassi del comando cp è identica a quella degli altri comandi di Linux. Ad alto livello, è diviso in due parti – opzioni e argomenti:

$ cp [OPTIONS] <SOURCE> <DEST>
$ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

Nella sintassi precedente, le parentesi quadre ([]) rappresentano gli argomenti facoltativi mentre le parentesi angolari (<>) rappresentano gli argomenti obbligatori.

1. Come copiare un file in Linux

Uno degli usi di base del comando cp è copiare un file in una directory corrente. La maggior parte delle volte gli utenti eseguono questa operazione per eseguire un backup della configurazione importante.

Ad esempio, spesso creiamo una copia di backup del file /etc/ssh/sshd_config prima di aggiornare la configurazione SSH.

Per capire l'utilizzo, creiamo un semplice file:

$ touch file-1.txt

Successivamente, crea una copia del file utilizzando il seguente comando:

$ cp file-1.txt file-2.txt

2. Mostra l'avanzamento del comando di copia

Nell'esempio precedente, abbiamo utilizzato il comando ls per verificare se l'operazione di copia del file è riuscita o meno. Tuttavia, non ha senso utilizzare un altro comando solo per verificare il risultato dei comandi precedenti.

In questi casi, possiamo abilitare la modalità dettagliata usando l'opzione -v, che fornisce la diagnostica per ogni file elaborato.

Facciamo una copia del file file-1.txt usando il seguente comando:

$ cp -v file-1.txt file-3.txt

Nell'output precedente, la freccia rappresenta il file che viene copiato. L'argomento del lato sinistro è il file sorgente mentre l'argomento del lato destro è il file di destinazione.

3. Come copiare più file nella directory

Finora abbiamo lavorato con un singolo file e solo la directory di lavoro corrente. Tuttavia, nell'ambiente di produzione reale, dobbiamo lavorare con un gran numero di file. Uno dei casi d'uso comuni in tali ambienti è copiare più file in un'unica directory.

Ovviamente, possiamo eseguire il comando cp più volte per ottenerlo, ma non sarà il modo più efficace. Per eseguire efficacemente tale operazione, possiamo utilizzare una sintassi alternativa del comando cp.

Quindi, per prima cosa, crea una nuova directory con il nome dir-1:

$ mkdir dir-1

Ora, copiamo tutti e tre i file nella directory dir-1 usando il singolo comando:

$ cp -v file-1.txt file-2.txt file-3.txt dir-1

L'output sopra mostra che tutti i file sono stati copiati nella directory dir-1. Inoltre, è importante notare che, per utilizzare questa sintassi alternativa, la directory deve essere già presente e deve essere l'ultimo argomento del comando.

4. Come evitare di sovrascrivere il file

Per impostazione predefinita, il comando cp sostituisce il file di destinazione, il che significa che sovrascriverà il file se esiste nella destinazione con lo stesso nome. Tuttavia, possiamo disabilitare questo comportamento predefinito usando l'opzione -n.

Per capirlo, proviamo a sovrascrivere il file esistente:

$ cp -n -v file-1.txt file-2.txt

In questo esempio, abbiamo utilizzato l'opzione -v per illustrare che il file file-2.txt non è stato sovrascritto.

5. Come sovrascrivere il file con conferma

Nell'esempio precedente abbiamo visto come evitare la sovrascrittura del file di destinazione. Tuttavia, a volte vogliamo sovrascrivere la destinazione del file in modo più sicuro.

In questi casi, possiamo usare l'opzione -i del comando per rendere interattiva l'operazione di copia. Questa opzione mostra il messaggio di avviso e attende la conferma dell'utente prima di sovrascrivere il file.

Per illustrare questo, proviamo a sovrascrivere il file esistente:

$ cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

Come possiamo vedere, il comando è in attesa di conferma. Proprio come altri comandi Linux, possiamo usare y per continuare o n per interrompere l'operazione.

Questo comportamento predefinito non interattivo del comando cp non è molto sicuro. È possibile che l'utente sovrascriva per errore una configurazione importante. Quindi alcune delle distribuzioni Linux applicano il comportamento interattivo per impostazione predefinita utilizzando il comando alias:

$ alias cp='cp -i'

6. Sovrascrivi file solo se l'origine è più recente

Nell'esempio precedente abbiamo visto come utilizzare la modalità interattiva. Tuttavia, a volte, un utente potrebbe sovrascrivere inavvertitamente il file più recente.

Per evitare tali casi soggetti a errori, possiamo usare l'opzione -u, che tenta l'operazione di copia solo se l'origine è più recente della destinazione o se il file non è presente nella destinazione.

Innanzitutto, aggiorna il timestamp del file sorgente:

$ touch -t 10101010 file-1.txt
$ ls -l file-1.txt

Nell'esempio precedente, abbiamo utilizzato l'opzione -t del comando touch per impostare il timestamp del file su 10-ott-2010.

Successivamente, aggiorniamo il timestamp del file di destinazione all'ora corrente:

$ touch file-2.txt

Ora, proviamo a eseguire l'operazione di copia utilizzando l'opzione -u:

$ cp -u -v file-1.txt file-2.txt

Qui possiamo vedere che l'operazione di copia non è stata tentata perché il file di destinazione è più recente dell'origine.

Infine, scambiamo gli argomenti di origine e destinazione ed eseguiamo l'operazione di copia:

$ cp -u -v file-2.txt file-1.txt

Nell'output precedente, possiamo osservare che l'operazione di copia ha esito positivo perché il file di origine è più recente della destinazione.

7. Come eseguire il backup del file prima della sovrascrittura

Possiamo indicare al comando cp di eseguire un backup del file di destinazione prima di sovrascriverlo. Per ottenere ciò possiamo utilizzare l'opzione --backup, che esegue backup automatici.

$ cp --backup=numbered -v file-1.txt file-2.txt

In questo esempio, abbiamo utilizzato la policy di backup numerata. Questa politica utilizza numeri incrementali nei nomi dei file di backup.

Per capirlo, eseguiamo lo stesso comando più volte e osserviamo l'output:

$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt

8. Come forzare la copia per sovrascrivere il file

Negli esempi precedenti abbiamo visto come sovrascrivere il file in modo più sicuro. Tuttavia, in alcuni rari casi, è necessario sovrascrivere il file. Tuttavia, non vi è alcuna garanzia che l'operazione abbia successo ogni volta.

Ad esempio, l'operazione di copia avrà esito negativo se il file di destinazione non dispone delle autorizzazioni di scrittura. Illustriamolo con un esempio.

Innanzitutto, modifica i permessi del file di destinazione:

$ chmod 444 file-2.txt
$ ls -l file-2.txt

Ora proviamo a sovrascrivere il file file-2.txt:

$ cp file-1.txt file-2.txt

Nell'output sopra, possiamo vedere che il comando non è riuscito con l'errore di autorizzazione negata.

Per superare questa limitazione, possiamo usare l'opzione -f, che cancella i file di destinazione e tenta l'operazione di copia se il file di destinazione non può essere aperto.

Ora, usiamo l'opzione -f per sovrascrivere forzatamente il file:

$ cp -f -v file-1.txt file-2.txt

9. Come rimuovere il file di destinazione prima della copia

Nell'esempio precedente, abbiamo visto come rimuovere il file di destinazione se si verifica un errore durante il suo funzionamento. Tuttavia, a volte il requisito è rimuovere prima il file di destinazione e quindi eseguire l'operazione di copia.

Per soddisfare tale requisito, possiamo usare l'opzione --remove-destination.

$ cp --remove-destination -v file-1.txt file-2.txt

Nell'output sopra, possiamo vedere che il comando cp prima rimuove il file di destinazione e quindi esegue l'operazione di copia.

10. Come creare un file Hard Link invece di copiarlo

Possiamo creare un hard link invece di creare una nuova copia del file sorgente. Questa opzione gioca un ruolo importante in caso di scarsità di spazio su disco.

Quindi, usiamo l'opzione -l per creare un hard link:

$ cp -l -v file-1.txt file-4.txt

Ora, controlliamo i numeri di inode di entrambi i file per verificare gli hard link:

$ ls -i1 file-1.txt file-4.txt

Nell'output precedente, i numeri nella prima colonna rappresentano i numeri di inode.

11. Come creare un file Soft Link invece di copiarlo

In modo simile, possiamo creare un soft link invece di creare una nuova copia utilizzando l'opzione -s come mostrato di seguito:

$ cp -s -v file-1.txt file-5.txt

Verifichiamo ora che il collegamento simbolico sia stato creato correttamente:

$ ls -l file-5.txt

Nell'output precedente, le ultime colonne rappresentano la relazione di collegamento simbolico.

12. Come preservare gli attributi del file durante la copia

Esistono vari attributi associati al file, come l'ora di accesso, l'ora di modifica, i permessi, ecc. Per impostazione predefinita, questi attributi non vengono conservati durante la copia del file. Per sovrascrivere questo comportamento predefinito possiamo usare l'opzione -p.

Per capirlo, per prima cosa aggiorna il timestamp del file-1.txt:

$ touch -t 10101010 file-1.txt

Ora, creiamo una copia di questo file conservando tutti i suoi attributi:

$ cp -p -v file-1.txt file-6.txt

Infine, verifica il timestamp del file file-6.txt:

$ ls -l file-6.txt

13. Come eseguire l'operazione di copia in modo ricorsivo

Finora abbiamo visto come copiare un singolo file. Tuttavia, spesso dobbiamo copiare tutti i file e le sottodirectory della directory specifica.

In questi casi, possiamo usare la modalità ricorsiva usando l'opzione -r o -R.

Quindi, creiamo una directory e aggiungiamo alcuni file e sottodirectory sotto di essa:

$ mkdir -p dir-1/dir-2
$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

Successivamente, verifica che la struttura della directory sia stata creata correttamente:

$ tree dir-1

Ora, copiamo la directory dir-1 in modo ricorsivo usando il seguente comando:

$ cp -r -v dir-1 dir-3

Infine, verifica che tutti i file e le sottodirectory siano stati copiati correttamente:

$ tree dir-3

14. Come copiare più directory

Analogamente ai file, possiamo copiare più directory ricorsive utilizzando un singolo comando. Tuttavia, per ottenere ciò, la directory di destinazione deve essere già presente e deve essere l'ultimo argomento nel comando. Capiamolo con un esempio.

Innanzitutto, crea una directory una nuova directory:

$ mkdir dir-4

Ora, copiamo le directory dir-1 e dir-3 nella directory dir-4 usando il comando seguente:

$ cp -r -v dir-1 dir-3 dir-4

In modo simile, possiamo usare l'opzione -t del comando per ottenere lo stesso risultato. Questa opzione ci consente di specificare la directory di destinazione. Quindi possiamo usarlo anche come primo argomento:

$ cp -t dir-4 -r -v dir-1 dir-3

In questo articolo, abbiamo discusso come copiare file e directory usando il comando cp. I principianti possono fare riferimento a questi esempi nella vita quotidiana mentre lavorano con i sistemi Linux.

Potrebbe piacerti anche:

  • Avanzamento: mostra la percentuale di dati copiati per i comandi (cp, mv, dd, tar)
  • Monitora l'avanzamento dei dati (copia/backup/compressione) utilizzando il comando pv
  • Comando di copia avanzato: mostra la barra di avanzamento durante la copia di file/cartelle di grandi dimensioni in Linux

Conosci qualche altro miglior esempio del comando cp in Linux? Facci sapere le tue opinioni nei commenti qui sotto.