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


53

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

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 esempio directory_backup?

Grazie per qualsiasi aiuto in anticipo

Risposte:


71

Si utilizza -r(copia ricorsivamente) e si specifica il nuovo nome

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

sostituisci con i percorsi reali ... ad esempio per copiare stuffdalla mia home directory in una directory esistentebackup e dai un nome alla nuova directory stuff-backup(se questa directory esiste già, nota che stuffverrà copiata in essa, non sovrascriverla).

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

~è una scorciatoia per la tua home directory /home/$USERo /home/zannanel 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!

È possibile aggiungere il -vflag dettagliato per cpsegnalare ogni copia eseguita ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...

Scusa Zanna. Metterò in pratica i tuoi consigli e vedrò come vado. Come l'idea della bandiera verbosa. supponiamo che funzionerà anche come rapporto mentre altri comandi sono in esecuzione. Saluti.
Edmuntu,

@Edmuntu scusa per cosa? Sì, molti comandi hanno un -vo un --verboseflag :)
Zanna,

scusa per l'iniziale breve "grazie" .... premi il tasto invio in errore.
Edmuntu,

10

Il comando che ti serve è semplicemente cpche sta per "copia".

Puoi usarlo ad 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 prima sostituire i segnaposto in maiuscolo con percorsi validi.

Tuttavia, cpper impostazione predefinita funziona solo su file, non su directory. Per farlo copiare una directory completa con tutto il suo contenuto in modo ricorsivo, è necessario aggiungere l' -ropzione:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Puoi saperne di più sul cpcomando digitando il man cptuo terminale.


Non utilizzato per questa sezione di commenti Byte Commander ... continua a premere Invio per cambiare riga ma pubblica invece. Contorno molto chiaro nella tua risposta. Non vedo l'ora di risolvere quelle directory ora che mi hanno dato buone istruzioni sull'uso corretto degli strumenti disponibili. Eccellente.
Edmuntu,

@Edmuntu In futuro, utilizzare MAIUSC + INVIO mentre si commenta per scendere di riga.
TheOdd,

@OwenHines Solo che i commenti eliminano qualsiasi interruzione di riga e spazi bianchi aggiuntivi e li hanno nell'editor non cambia nulla nel risultato.
Byte Commander

@ByteCommander Oh giusto, non importa. Bene, ora lo sa.
TheOdd,

6

In alternativa al comando cp generalmente utile è possibile utilizzare rsync che ha l'ulteriore vantaggio di replicare le autorizzazioni / timestamp della struttura di directory originale:

rsync -av dir/ newdir

-un archivio -v dettagliato

notare la barra dopo la directory di origine.


5

Trovo più facile passare alla directory che sto copiando per prima. Per questo esempio passare a una directory che tutti hanno chiamato /boot. Chiunque può copiare e incollare i comandi seguenti 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 cpcomando la directory corrente viene identificata come .la /bootdirectory in cui siamo stati modificati. L' -ropzione rende ricorsivo includere tutte le sottodirectory.

In questo caso, per garantire il corretto funzionamento, duelencare tutte le sottodirectory e le dimensioni totali dei file nella nuova directory /boot_backup.

Dopo aver completato questa procedura dettagliata, utilizzare: sudo rm -r /boot_backupper rimuovere la nuova directory e le sue sottodirectory.


1
Mentre questo spiega come copiare tutti i file dalla directory corrente a un'altra directory, non risponde completamente alla domanda dei OP su come copiare una directory (e il suo contenuto) in una directory con un nome diverso. Ci sono comandi più brevi (come cp -r) che si occuperanno della creazione di una nuova directory e della copia di tutti i file in essa contenuti
BlueCacti,

1
Spiega come copiare e dir ed i suoi contenuti - la differenza è che cambia prima nella directory di origine come abitudine precauzionale. cp -rcome si consiglia è già sulla terza riga di comando. Il tutorial si basa sul fatto che ognuno ha una /bootdirectory e può provarlo sul proprio computer. Se avessi usato i cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backuplettori non potevano copiare e incollare nel loro terminale: avrebbero cambiato GroundZerocreando più lavoro e possibilità di errore. Spero che apprezzerai il BACIO di questa risposta con un tutorial incorporato.
WinEunuuchs2Unix

1
@GroundZero facendo un cd ~/Documents/SomeObsucreFolder/2016/Nov/per impostare la directory corrente come directory di origine cambierà il prompt del Terminale per assicurarsi che sia scritto correttamente e quindi usando cp -r .come sorgente elimina la riscrittura della directory di origine. È semplicemente ciò che considero una buona abitudine. Inoltre, una volta cambiato nella directory di origine, è facile da fare ls FIleName1, ls FileName2ecc. Per assicurarsi che i file di cui si desidera eseguire il backup siano presenti senza dover ripetere il nome della directory di origine per il lscomando.
WinEunuuchs2Unix

5

È possibile utilizzare il comando seguente per copiare la directory da una posizione a un'altra sottodirectory.

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

Spiegazione del comando:

  • -R = copia ricorsivamente delle directory
  • v = spiega cosa si sta facendo
  • p = Aiuterà a preservare l'autorizzazione e la proprietà con i timestamp

Grazie @Rakesh Chauhan. "Conserva il tuo permesso e la proprietà con i timestamp" ??? Caspita .... devo arrivarci !!!! Ancora un altro aspetto dei comandi di linea da esplorare. Grazie per la risposta.
Edmuntu,

4

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

cp -R source/ destination/

Ciò copierebbe la source/cartella e tutte le sue sottodirectory destination/.

Se destination/non esiste, verrà creato.

La -Rbandiera sta per ricorsivo, che dice cpdi copiare tutte le sottodirectory.


Grazie @ Owen Hines. Sembra che questo sia sicuramente il comando per il mio compito
Heers

1
@Edmuntu Sono felice di aiutarti, se hai trovato la soluzione al tuo problema, puoi per favore contrassegnare la risposta che ha funzionato per te come quella corretta facendo clic sul segno di spunta sotto di essa? Questo aiuterà ad avvisare gli altri che visualizzano la pagina della domanda da risolvere.
TheOdd,

1

In genere si desidera mantenere le autorizzazioni per i file uguali quando si effettua una copia, non un nuovo set di autorizzazioni di creazione predefinite. Ciò significa che usa -a flag per cp.

cp -a file filenew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.