Come faccio a copiare una cartella con file in un'altra cartella in Unix / Linux? [chiuso]


1192

Sto riscontrando alcuni problemi per copiare una cartella con i file in quella cartella in un'altra cartella. Il comando cp -rnon copia i file nella cartella.




Vorrei che questo potesse essere migrato in una SE dove è più in tema.
jrh

6
La programmazione Bash è in argomento .
xskxzr,

Risposte:


1980

L'opzione che stai cercando è -R.

cp -R path_to_source path_to_destination/
  • Se destinationnon esiste, verrà creato.
  • -Rsignifica copy directories recursively. Puoi anche usare -rpoiché non distingue tra maiuscole e minuscole.
  • Nota le sfumature con l'aggiunta del finale /come da commento di @ muni764 .

5
mi chiedo perché questo comando esatto in dockerfile copi tutti i file della directory di origine nella destinazione, invece di copiare solo l'intera directory.
holms

4
Credo che il simbolo "/" alla fine faccia la differenza e ciò potrebbe spiegare la tua esperienza. Se l'origine include la barra finale, copierà solo ciò che è nella directory. Se non include la barra finale, copierà anche la directory e quindi i contenuti al suo interno. La mia memoria è che questo comportamento varia un po 'per comando e forse per evento dal sistema operativo. Ecco un riferimento con maggiori informazioni.
Ollie nato il

23
Direi che se non vuoi includere il sorgente e vuoi assicurarti che tutto sia copiato (link simbolici, file nascosti) senza copiare la cartella genitore sorgente devi usare -ra source /. destinazione. Ciò assicurerà che il contenuto della cartella sia copiato, ma non la cartella principale stessa, che a volte è utile. E la differenza è il /.
muni764,

Anche questo sembra funzionare correttamente se le directory da copiare sono collegamenti simbolici, che era il mio caso d'uso.
Gdalya,

3
Nota l'importanza di "Slash dot" sulla tua fonte in cp -r src/. destSo che è menzionato, ma mi sembra ancora che mi manchi ogni volta.
bebeher

368

Stai cercando il cpcomando. È necessario modificare le directory in modo da trovarsi al di fuori della directory che si sta tentando di copiare.

Se viene chiamata la directory che stai copiando dir1e vuoi copiarla nella tua /home/Picturescartella:

cp -r dir1/ ~/Pictures/

Linux fa distinzione tra maiuscole e minuscole e ha bisogno anche del /dopo ogni directory per sapere che non è un file. ~è un carattere speciale nel terminale che valuta automaticamente la home directory dell'utente corrente. Se hai bisogno di sapere in quale directory ti trovi, usa il comando pwd.

Quando non sai come usare un comando Linux, c'è una pagina di manuale a cui puoi fare riferimento digitando:

man [insert command here]

al prompt del terminale.

Inoltre, per completare automaticamente i percorsi di file lunghi durante la digitazione nel terminale, puoi premere Tabdopo aver iniziato a digitare il percorso e ti verranno presentate delle scelte oppure inserirà la parte rimanente del percorso.


6
Per chiarire ulteriormente, l' -ropzione in questo copierà ricorsivamente le directory.
TVann

5
L'OP non ha specificato che stava usando il cp -rcomando, ma che non funzionava correttamente?
MD XF,

4
Il motivo per cui ho incluso le informazioni sulle manpage è che questi flag possono dipendere dalla distribuzione. Tuttavia, per la maggior parte, sembra -r, --recursivee -Rsono equivalenti. Darà anche insidie ​​comuni, ecc. Che è bello.
Alex W,

6
Se vuoi copiare in modo portabile la DIRECTORY e non solo i suoi contenuti, lascia il trattino finale nella cartella sorgente, ad es. cp -r dir1 ~/Pictures/
mehtunguh,

105

Uso:

$ cp -R SRCFOLDER DESTFOLDER/

4
questo è il modo in cui l'ho fatto e demo1_copynon esisteva già$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
HattrickNZ,
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.