Copying a folder may seem trivial until the day when the directory contains hidden files, symbolic links, or useful dates for a script. cp -r recopies the tree structure, but cp -a is often the better choice to duplicate a working folder without modifying its attributes.
Before deleting the source, create the copy, check it, and open a few files. A successful command does not prove that you targeted the right path.

Scegliere tra cp -r e cp -a
cp -r scende nelle sottodirectory. Le voci che iniziano con un punto sono incluse quando copi il folder stesso. Evita invece il globbing del tipo * se ti aspetti anche i file nascosti: la shell li ignora per impostazione predefinita.
cp -a attiva la modalità archivio. Mantiene il più possibile le permessi, i proprietari, le date, i link simbolici e i link fisici. Per un backup locale o una migrazione di directory, è generalmente il comando da preferire. Può richiedere diritti elevati se devi preservare un proprietario che il tuo account non può definire.
cp -a -- /srv/app/ /srv/app-copie/
Il -- separa le opzioni dai percorsi. Evita che un file che inizia con un trattino venga interpretato come un’opzione. Lo slash finale della sorgente significa qui che stai copiando il suo contenuto in /srv/app-copie/. Se questa cartella esiste già, verifica la struttura ottenuta prima di continuare.
Preparare una destinazione senza sovrascrivere la cartella sbagliata
Prima crea una destinazione chiaramente denominata, poi elenca i due lati. Su un server, non avviare una copia ricorsiva verso un percorso costruito a mano in uno script senza visualizzare quel percorso nei log.
mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%fn' | sort
find /srv/app-copie -maxdepth 1 -printf '%fn' | sort
Se vuoi rifiutare qualsiasi sovrascrittura durante un primo tentativo, aggiungi -n. Questa opzione ignora i file già presenti, quindi non è adatta a una sincronizzazione completa. Per sostituire dati esistenti, fai un backup o lavora in una nuova directory, poi trasferisci il servizio sulla copia convalidata.
Controllare i file, i diritti e i link
Inizia controllando i file nascosti e i diritti. ls -la mostra i nomi che iniziano con un punto. stat consente di confrontare le permessi e le date di un file sensibile.
ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls
L’ultima comando elenca i link simbolici. Con cp -a, un link rimane normalmente un link. Con una copia meno adatta, potresti trovarti con il contenuto della sua destinazione o un link diventato non valido dopo lo spostamento.
- conta i file con
find ... -type f | wc -l; - apri il file di configurazione più importante ;
- testa il programma contro la copia prima di eliminare la sorgente ;
- mantieni la sorgente finché il servizio o lo script non ha passato il suo controllo funzionale.
Per confrontare il contenuto di due strutture, diff -qr /srv/app /srv/app-copie segnala i file che differiscono. Non sostituisce una convalida applicativa, ma rileva rapidamente una copia incompleta.
Se devi anche correggere i permessi dopo una duplicazione, la guida su chmod ricorsivo su Linux spiega perché un chmod -R lanciato troppo in fretta può rompere eseguibili. Per ritrovare un file prima della copia, utilizza anche find su Linux.