Mentre questo tutorial è per i principianti, è anche utile per tutti rivedere rapidamente varie opzioni di comando cp usando alcuni esempi pratici.
Anche se stai usando il comando cp tutte le volte, probabilmente uno o più esempi spiegati di seguito potrebbero essere nuovi per te.
La forma generale del comando copia:
cp [option] source destination
1. Copia un file o una directory dall’origine alla destinazione
Per copiare un file, è necessario passare l’origine e la destinazione al comando copia. L’esempio seguente copia il file da project / readme.txt in projectbackup / readme-new.txt$ cp project/readme.txt projectbackup/readme-new.txt
$ cd projectbackup/
$ ls readme-new.txt
Se si desidera copiare un file da una cartella a un’altra con lo stesso nome, solo il nome della directory di destinazione è abbastanza buono 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 sorgente hanno un modello comune, utilizzare i caratteri jolly come mostrato di seguito. In questo esempio, tutti i file di 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/
dd
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 consente di eseguire il backup del file di destinazione prima di sovrascriverlo.
In questo esempio, readme.txt esiste sia nella directory project / che 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 8 gennaio 13:36 readme.txt -rw-r - r-- 1 bala geek 1038 8 gennaio 13:15 readme.txt ~
Parlando di backup, è importante capire come funziona il comando rsync per eseguire il backup dei file in modo efficace.
4. Conservare i collegamenti durante la copia
Quando si esegue il comando cp, se l’origine è un file di collegamento, il file effettivo viene copiato e non il file di collegamento. Nel caso in cui desideri solo copiare il link così com’è, specifica l’opzione -d come mostrato di seguito:
Quanto segue mostra che senza l’opzione -d, copierà il file (e non il link):
$ cd project / bin
$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 gen 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 8 gennaio 14:02 startup.sh
Per conservare 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 gen 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 8 gennaio 13:15 readme.txt
$ cd ../project
$ ls -l readme.txt
-rw-r - r-- 1 bala geek 1020 8 gennaio 12:25 readme.txt
$ cp -n readme.txt / home / thegeekstuff / projectbackup / bin /
$ echo $?
0
Come vedi di seguito, il file di destinazione non è stato sovrascritto.
$ cd projectbackup
$ ls -l readme.txt
-rw-r - r-- 1 bala geek 1038 8 gennaio 13:15 readme.txt
6. Conferma prima della sovrascrittura (modalità interattiva)
Quando si utilizza l’opzione -i, verrà richiesta una conferma prima di sovrascrivere un file come mostrato di seguito.
$ cp -i readme.txt / home / thegeekstuff / projectbackup /
cp: sovrascrivi `/home/thegeekstuff/projectbackup/readme.txt '? y
7. Creare un collegamento reale a un file (anziché copiarlo)
Quando si esegue il comando cp, è possibile creare un collegamento reale del file (anziché copiarlo). L’esempio seguente crea il collegamento reale per il file sample.txt nella directory test /,
$ ls -li sample.txt
10883362 -rw-r - r-- 2 bala geek 1038 9 gennaio 18:40 sample.txt
$ cp -l test sample.txt /
$ ls -li test / sample.txt
10883362 -rw-r - r-- 2 bala geek 1038 9 gennaio 18:40 test / sample.txt
Come visto sopra, test / sample.txt è un file collegato al file sample.txt e l’inode di entrambi i file è lo stesso.
8. Creare un collegamento software a un file o una directory (anziché copiarlo)
Quando si esegue il comando cp, è possibile creare un collegamento software a un file o una directory. Nel seguente esempio, 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 19 novembre 2010 libFS.so.6.0.0
# cp -s libFS.so.6.0.0 libFS.so
# ls -l libFS.so
lrwxrwxrwx 1 root root 14 gen 9 20:18 libFS.so -> libFS.so.6.0.0
9. Conservare gli attributi del file o della directory durante la copia
Utilizzando l’opzione -p, è possibile conservare le proprietà di un file o directory come mostrato di seguito:
$ ls -l sample.txt
-rw-r - r-- 2 bala geek 1038 9 gennaio 18:40 sample.txt
$ cp -p sample.txt test /
$ ls -l test / sample.txt
-rw-r - r-- 2 bala geek 1038 9 gennaio 18:40 test / sample.txt
È anche possibile conservare 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 mancante
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 manca il file di destinazione utilizzando l’opzione -u come mostrato di seguito.
In questo esempio, i due file LICENSE e readme.txt verranno copiati dal progetto / al 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 /. Ciò viene gestito automaticamente dal comando cp, se si utilizza 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