Come copiare file in Linux con il comando cp
Il comando cp in Linux viene utilizzato per copiare file e directory. In questo tutorial imparerai alcuni degli usi essenziali del comando cp.
Uno dei comandi che devi conoscere in Linux è cp. In Linux viene spesso chiamato comando copia e in realtà è l'abbreviazione di copia e fa esattamente ciò che suggerisce il nome: copia.
cp viene utilizzato per copiare file da una posizione all'altra. cp può anche essere usato per copiare intere directory in una nuova posizione. Puoi usarlo anche per copiare più file e directory.
7 Esempi di utilizzo del comando cp in Linux
Vediamo come è possibile utilizzare il comando cp per vari scopi:
1. Come copiare un file
L'esempio più semplice sarebbe copiare un file. Per fare ciò, devi solo specificare il file di origine e la directory o il file di destinazione.
cp source_file target_directory/target_file
Nell'esempio sopra, se target_fille non esiste nella target_directory, creerà target_file.
Tuttavia, se new_file esiste già, lo sovrascriverà senza chiedere. Ciò significa che il contenuto del file di destinazione esistente verrà modificato con il contenuto del file di origine.
Ti mostrerò come gestire la sovrascrittura dei file più avanti in questo tutorial.
2. Come copiare più file
Se desideri copiare più file contemporaneamente in una nuova posizione, puoi farlo nel modo seguente:
cp file1 file2 file3 fileN target_directory
Questo copierà tutti i file specificati nella directory di destinazione. Se la directory di destinazione contiene file che corrispondono al nome dei file di origine, verrà sovrascritta.
3. Diversi modi per gestire la sovrascrittura durante la copia dei file
Probabilmente non vorrai sempre che i tuoi file di destinazione esistenti vengano sovrascritti e questo è del tutto logico.
Per evitare di sovrascrivere i file esistenti, puoi utilizzare l'opzione -n. In questo modo, cp non sovrascriverà i file esistenti.
cp -n source_file target_directory
Ma forse vuoi sovrascrivere alcuni file. Puoi utilizzare l'opzione interattiva -i e ti chiederà se desideri sovrascrivere uno o più file esistenti.
cp -i source_file target_directory
cp: overwrite 'target_directory/source_file'?
È possibile inserire y per sovrascrivere il file esistente oppure n per non sovrascriverlo.
C'è anche un'opzione per eseguire backup automatici. Se usi l'opzione -b con il comando cp, sovrascriverà i file esistenti ma prima creerà un backup dei file sovrascritti.
cp -b file.txt target_dir/file.txt
ls target_dir
file.txt file.txt~
Il backup del file termina con ~.
Puoi anche utilizzare l'opzione di aggiornamento -u quando hai a che fare con la sovrascrittura. Con l'opzione -u, i file di origine verranno copiati nella nuova posizione solo se il file di origine è più recente del file esistente o se non esiste nella directory di destinazione.
Riassumere:
-i: conferma prima di sovrascrivere
-n: nessuna sovrascrittura
-b: sovrascrittura con backup
-u: sovrascrivi se il file di destinazione è vecchio o non esiste
4. Come copiare una directory in Linux
Puoi anche usare il comando cp per copiare una directory in Linux inclusi tutti i suoi file e sottodirectory. Devi usare l'opzione -r qui che sta per ricorsivo.
cp -r source_dir target_dir
Questo copierà l'intera source_dir in target_dir. Ora source_dir sarà una sottodirectory di target_dir.
ls target_dir
source_dir
5. Come copiare solo il contenuto di una directory, non la directory stessa
Nell'esempio precedente, hai copiato l'intera directory in una nuova posizione.
Ma se vuoi solo copiare il contenuto della directory di origine nella directory di destinazione, dovresti aggiungere /. alla fine della directory di origine. Ciò indicherà che desideri copiare solo il contenuto della directory di origine.
Vediamolo con un esempio:
ls source_dir
source_file_1 source_file2
Ora copia il contenuto della directory di origine:
cp -r source_dir/. target_dir
Se controlli ora il contenuto della directory di destinazione, vedrai che è stato copiato solo il contenuto della directory di origine.
ls target_dir
source_file_1 source_file2
6. Come copiare più directory
Puoi anche copiare più directory contemporaneamente con il comando cp in Linux.
Usalo nello stesso modo in cui lo hai fatto per una singola directory.
cp -r source_dir1 source_dir2 source_dir3 target_dir
È sempre l'ultimo argomento nel comando che viene preso come directory di destinazione.
Se desideri copiare solo il contenuto di più directory contemporaneamente, puoi farlo anche tu:
cp -r source_dir1/. source_dir2/. source_dir3/. target_dir
In effetti, puoi mescolare del tutto directory, il loro contenuto e file.
cp -r source_dir1 source_dir2/. source_file target_dir
7. Come preservare gli attributi durante la copia
Quando copi un file in una nuova posizione, i suoi attributi come le autorizzazioni del file e i timestamp del file vengono modificati.
Se vuoi mantenere gli attributi del file originale, puoi copiare i file con l'opzione -p.
Vediamolo con un esempio.
ls -l /etc/services
-rw-r--r-- 1 root root 19183 Dec 26 2016 /etc/services
Se provo a copiare questo file normalmente, i suoi attributi verranno modificati:
cp /etc/services .
ls -l services
-rwxrwxrwx 1 abhishek abhishek 19183 Nov 25 20:45 service
Ma se utilizzo l'opzione p, il file copiato manterrà la modalità, la proprietà e il timestamp.
cp -p /etc/services .
ls -l services
-rw-r--r-- 1 abhishek abhishek 19183 Dec 26 2016 services
Come puoi vedere, hai conservato la modalità di accesso e il timestamp del file sorgente con l'opzione -p.
Ma aspetta! Non avrebbe dovuto preservare anche la proprietà dei file sorgente? Ma qui il proprietario (root) del file sorgente è stato cambiato in abhishek.
Questo perché solo root ha il permesso di modificare la proprietà di un file di proprietà di root. Se usi l'opzione -p con un file non di proprietà di root, ne manterrà la proprietà. Oppure puoi eseguire il comando con sudo per preservare la proprietà di un file di proprietà di root.
Puoi anche specificare gli attributi che desideri preservare. Ma poi dovrai usare l’opzione –preserve.
cp --preserve=timestamp /etc/services .
ls -l services
-rw-r--r-- 1 abhishek abhishek 19183 Dec 26 2016 services
Come puoi vedere nell'output sopra, ha conservato solo il timestamp del file sorgente.
Conclusione
Puoi esplorare ulteriormente il comando cp sfogliando la sua pagina man. Gli esempi mostrati qui sono quelli più comuni che utilizzerai come utente Linux, amministratore di sistema o sviluppatore di software.
In effetti, il comando cp è in qualche modo uno standard per copiare i file. La sua sintassi è seguita in altri comandi di copia come scp e docker cp.
Se ti è piaciuto questo tutorial, condividi questo articolo sui social media e vari forum.