bagaimana Anda menyalin direktori dan isinya ke lokasi baru di bawah nama direktori baru?

53

Saya baru mengenal baris perintah Linux dan sedang berusaha memahami perintah salin saat ini.

Adakah yang bisa memberitahu saya jika mungkin untuk menyalin direktori dengan subdirektori dan file terkait ke direktori baru dengan nama baru misalnya direktori_backup?

Terima kasih atas semua dan semua bantuan di muka

Edmuntu
sumber

Jawaban:

71

Anda menggunakan -r(menyalin secara rekursif) dan menentukan nama baru

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

ganti dengan path asli ... misalnya untuk menyalin stuffdari direktori home saya ke direktori yang adabackup dan beri nama direktori baru stuff-backup(jika direktori ini sudah ada, perhatikan bahwa stuffakan disalin ke dalamnya, bukan menimpanya).

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

~adalah jalan pintas untuk direktori home Anda /home/$USERatau /home/zannadalam kasus saya. Anda dapat menghilangkannya jika direktori kerja saat ini adalah direktori home Anda - Anda dapat melihatnya dari prompt Anda

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

Anda dapat menambahkan -vbendera verbose untuk membuat cplaporan setiap salinan dilakukan ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Zanna
sumber
Maaf Zanna. Saya akan menerapkan saran Anda dan melihat bagaimana saya melangkah. Seperti ide bendera verbose. menganggap ini juga akan berfungsi sebagai laporan saat perintah lain sedang dikerjakan .. Ceria.
Edmuntu
@Edmuntu maaf untuk apa? Ya, banyak perintah memiliki tanda -vatau --verbosetanda :)
Zanna
maaf untuk inisial pendek "terima kasih" .... tekan tombol kembali salah.
Edmuntu
10

Perintah yang Anda butuhkan hanyalah cpsingkatan dari "copy".

Anda dapat menggunakannya misalnya dengan salah satu sintaks ini:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

Varian pertama memungkinkan Anda menentukan nama file baru untuk file target, sementara varian kedua membuat salinan dengan nama yang sama di direktori target. Anda tentu saja harus mengganti pemegang tempat dalam huruf kapital dengan jalur yang valid terlebih dahulu.

Namun, cpsecara default hanya beroperasi pada file, bukan pada direktori. Untuk membuatnya menyalin direktori lengkap dengan semua kontennya secara rekursif, Anda harus menambahkan -ropsi:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Anda dapat mempelajari lebih lanjut tentang cpperintah dengan mengetik man cpdi terminal Anda.

Komandan Byte
sumber
Tidak terbiasa dengan bagian komentar ini Byte Commander ... tetap tekan kembali untuk mengubah baris tetapi posting sebagai gantinya. Garis besar yang sangat jelas dalam jawaban Anda. Nantikan untuk memilah direktori-direktori itu sekarang karena saya telah diberikan instruksi yang baik tentang penggunaan yang benar dari alat-alat yang tersedia. Luar biasa.
Edmuntu
@Edmuntu Di masa depan, gunakan SHIFT + ENTER sambil berkomentar untuk turun baris.
TheOdd
@OwenHines Hanya dengan komentar yang menghapus linebreak dan spasi putih tambahan dan memilikinya di editor tidak mengubah apa pun dalam hasilnya.
Byte Commander
@ByteCommander Oh benar, tidak apa-apa. Nah, sekarang dia tahu.
TheOdd
6

Sebagai alternatif dari perintah cp yang umumnya bermanfaat, Anda dapat menggunakan rsync yang memiliki manfaat tambahan dengan mereplikasi izin / stempel waktu pada struktur direktori asli:

rsync -av dir/ newdir

arsip -v-verbose

catat slash setelah dir sumber.

slowko
sumber
5

Saya merasa lebih mudah untuk mengubah ke direktori saya menyalin dari dulu. Untuk contoh ini, ubah ke direktori yang dipanggil oleh semua orang /boot. Siapa pun dapat menyalin dan menempelkan perintah di bawah ini ke Terminal mereka.

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

Untuk cpperintah direktori saat ini diidentifikasi sebagai .yang merupakan /bootdirektori kami berubah menjadi. The -rpilihan membuatnya rekursif untuk memasukkan semua sub-direktori.

Untuk memastikannya berfungsi, jalankan duuntuk mendaftar semua sub-direktori dan total ukuran file dalam direktori baru /boot_backupdalam kasus ini.

Setelah menyelesaikan penelusuran ini, gunakan: sudo rm -r /boot_backupuntuk menghapus direktori baru dan itu adalah sub-direktori.

WinEunuuchs2Unix
sumber
1
Meskipun ini menjelaskan bagaimana cara menyalin semua file dari direktori Anda saat ini ke direktori lain, itu tidak sepenuhnya menjawab pertanyaan OPs tentang cara menyalin direktori (dan kontennya) ke direktori nama yang berbeda. Ada perintah yang lebih pendek (seperti cp -r) yang akan menangani pembuatan direktori baru dan menyalin semua file ke dalamnya
BlueCacti
1
Itu menjelaskan cara menyalin dan dir dan isinya - perbedaannya itu berubah ke direktori sumber pertama sebagai kebiasaan pencegahan. cp -rseperti yang Anda sarankan sudah ada di baris perintah ketiga. Tutorial didasarkan pada fakta bahwa setiap orang memiliki /bootdirektori dan dapat mencoba ini di mesin mereka sendiri. Seandainya saya menggunakan cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backuppembaca tidak bisa menyalin dan menempel ke terminal mereka - mereka akan berubah GroundZeromenciptakan lebih banyak pekerjaan dan peluang untuk kesalahan. Saya harap Anda menghargai KISS dari jawaban ini dengan tutorial yang tertanam.
WinEunuuchs2Unix
1
@GroundZero melakukan cd ~/Documents/SomeObsucreFolder/2016/Nov/untuk mengatur direktori saat ini sebagai direktori sumber akan mengubah Terminal prompt untuk memastikan itu dieja dengan benar dan kemudian menggunakan cp -r .sebagai sumber menghilangkan mengetik ulang direktori sumber. Ini hanyalah apa yang saya anggap sebagai kebiasaan yang baik. Selain itu sekali mengubah ke direktori sumber itu mudah dilakukan ls FIleName1,, ls FileName2dll. Untuk melihat kembali file yang ingin Anda backup ada di sana tanpa harus mengulangi nama direktori sumber untuk lsperintah.
WinEunuuchs2Unix
5

Anda dapat menggunakan perintah di bawah ini untuk menyalin direktori dari satu tempat ke subdirektori lain.

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

Penjelasan perintah:

  • -R = salin direktori secara rekursif
  • v = jelaskan apa yang sedang dilakukan
  • p = Ini akan membantu Anda untuk mempertahankan izin dan kepemilikan Anda dengan stempel waktu
Rakesh C
sumber
Terima kasih @Rakesh Chauhan. "Pertahankan izin dan kepemilikan Anda dengan stempel waktu" ??? Wow .... Saya harus melakukannya !!!! Namun aspek lain dari perintah baris harus dieksplorasi. Terimakasih atas balasan anda.
Edmuntu
4

cpadalah perintah yang melakukan fungsi yang Anda cari. Itu singkatan dari copy dan tidak hanya itu. Perintah yang akan bekerja untuk Anda dalam situasi ini adalah

cp -R source/ destination/

Ini akan menyalin source/folder dan semua sub-direktori ke destination/.

Jika destination/tidak ada, itu akan dibuat.

The -Rbendera singkatan rekursif, yang memberitahu cpuntuk menyalin semua sub-direktori.

TheOdd
sumber
Terima Kasih @ Owen Hines. Kedengarannya seperti ini jelas merupakan perintah untuk tugas saya. Cheers
Edmuntu
1
@Edmuntu Senang saya bisa membantu, jika Anda menemukan solusi untuk masalah Anda, dapatkah Anda menandai jawaban yang berfungsi untuk Anda sebagai yang benar dengan mengklik tanda centang di bawahnya? Ini akan membantu mengingatkan orang lain yang melihat halaman pertanyaan yang sedang diselesaikan.
TheOdd
1

Anda umumnya ingin menjaga izin file tetap sama saat membuat salinan, bukan set baru izin pembuatan default. Itu berarti menggunakan -a flag untuk cp.

cp -a file filenew
Robi
sumber