come si copia una directory e il suo contenuto in una nuova posizione sotto un nuovo nome di directory?

28

Sono nuovo alla linea di comando di Linux e sto cercando di fare i conti con il comando di copia al momento.

Qualcuno può dirmi se è possibile copiare una directory con le sue sottodirectory e i file associati in una nuova directory con un nuovo nome, ad es. directory_backup?

Grazie per qualsiasi aiuto in anticipo

    
posta Edmuntu 02.11.2016 - 23:04
fonte

7 risposte

38

Usa -r (copia ricorsivamente) e specifica il nuovo nome

cp -r /path/to/directory /path/to/location/new-name

sostituire con i percorsi reali ... ad esempio copiare stuff dalla mia directory home a una esistente directory backup e denominare la nuova directory stuff-backup (se questa directory esiste già , nota che stuff verrà copiata in , non sovrascritta).

cp -r ~/stuff ~/backup/stuff-backup

~ è una scorciatoia per la tua directory home /home/$USER o /home/zanna nel mio caso. Puoi ometterlo se la directory di lavoro corrente è la tua home directory - puoi vederla dal tuo prompt

zanna@monster:~$
              ^--the ~ here is where I am - home!

Puoi aggiungere il flag -v verbose per fare in modo che% co_de rappresenti ogni copia eseguita ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
    
risposta data Zanna 02.11.2016 - 23:15
fonte
8

Il comando di cui hai bisogno è semplicemente cp che significa "copia".

Puoi usarlo per esempio con una di queste sintassi:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

La prima variante consente di specificare un nuovo nome file per il file di destinazione, mentre la seconda variante crea una copia con lo stesso nome nella directory di destinazione. Ovviamente devi sostituire i segnaposto in lettere maiuscole con percorsi validi.

Tuttavia, cp di default opera solo sui file, non sulle directory. Per fare in modo che copi in modo ricorsivo una directory completa con tutti i suoi contenuti, devi aggiungere l'opzione -r :

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Puoi leggere ulteriori informazioni sul comando cp digitando man cp nel tuo terminale.

    
risposta data Byte Commander 02.11.2016 - 23:15
fonte
6

In alternativa al comando cp generalmente utile puoi usare rsync che ha il vantaggio di replicare le autorizzazioni / timestamp della struttura di directory originale:

rsync -av dir/ newdir

-un archivio -v verbose

prendi nota della barra dopo la directory di origine.

    
risposta data siloko 03.11.2016 - 08:26
fonte
4

Trovo più facile passare alla directory che sto copiando da prima. Per questo esempio, passa a una directory che tutti hanno chiamato /boot . Chiunque può copiare e incollare i comandi sottostanti nel proprio terminale.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Per il comando cp la directory corrente è identificata come . , che è la directory /boot che abbiamo modificato. L'opzione -r lo rende ricorsivo per includere tutte le sottodirectory.

Per assicurarti che funzioni, esegui du per elencare tutte le sottodirectory e le dimensioni totali dei file nella nuova directory /boot_backup in questo caso.

Dopo aver completato questo passaggio, usa: sudo rm -r /boot_backup per rimuovere la nuova directory e le sue sottodirectory.

    
risposta data WinEunuuchs2Unix 02.11.2016 - 23:34
fonte
4

cp è il comando che esegue la funzione che stai cercando. Sta per copia e fa proprio questo. Il comando che potrebbe funzionare per te in questa situazione è

cp -R source/ destination/

Copierà la cartella source/ e tutte le sue sottodirectory in destination/ .

Se destination/ non esiste, verrà creato.

Il flag -R sta per ricorsivo, che dice a cp di copiare tutte le sottodirectory.

    
risposta data Owen Hines 02.11.2016 - 23:16
fonte
3

Puoi usare il comando seguente per copiare la directory da un posto a un'altra sottodirectory.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Spiegazione del comando:

  • -R = copia le directory in modo ricorsivo
  • v = spiega cosa si sta facendo
  • p = Aiuterà a conservare la tua autorizzazione e proprietà con data e ora
risposta data Rakesh C 03.11.2016 - 13:50
fonte
0

In genere si desidera mantenere invariate le autorizzazioni del file quando si effettua una copia, non un nuovo set di autorizzazioni di creazione predefinite. Ciò significa usare -un flag per cp.

cp -a file filenew
    
risposta data Robi 08.11.2016 - 07:31
fonte

Leggi altre domande sui tag