Come posso copiare una struttura di directory, dir1, in dir2, (con tutte le sottodirectory) su Unix usando la finestra del terminale?
Come posso copiare una struttura di directory, dir1, in dir2, (con tutte le sottodirectory) su Unix usando la finestra del terminale?
Risposte:
cp -rf /source/path/ /destination/path/
-r
= ricorsivo, copia tutte le sottodirectory
-f
= forza, se non è possibile aprire un file di destinazione esistente, rimuoverlo e riprovare
Nota Dovresti stare attento quando usi il -f
flag perché sovrascriverà con forza tutto ciò su cui copi. Grazie a @Nifle per questo suggerimento.
È possibile utilizzare il carattere jolly * per copiare tutti i file nella directory, se necessario.
f
bandiera. -f if an existing destination file cannot be opened, remove it and try again
-f
bandiera è utile se stai copiando <source> su <dest> (come nel sovrascrivere le cose in <dest>), la voterò io personalmente e cancellerò la mia risposta)
Mentre le cp -R
risposte sono giuste (a proposito il caso del flag su BSD deve essere maiuscolo, entrambi sono supportati su Linux), c'è un vecchio incantesimo che coinvolge tar :
$ tar cf - . | (cd DIR; tar xf - )
Perché diamine lo faresti? Perché tar ha una comprensione abbastanza sofisticata dei collegamenti sia duri che simbolici.
Vuoi copiare per sostituire i collegamenti simbolici esistenti con uno con lo stesso testo? O con collegamenti allo stesso target (regolazione dei percorsi relativi per compensare)? O con copie bit a bit del target?
Se due file nell'originale sono strettamente collegati, la nuova struttura dovrebbe avere due copie dei dati o solo una?
Decisioni decisioni. Tar ha impostazioni predefinite ragionevoli, ma ti consente di essere molto specifico al riguardo.
mi piace
cp -axv source dest
Rsync è un altro ottimo strumento per questo
rsync -va source dest