Perbedaan antara cp -r dan cp -a

174

Saya mencari perbedaan antara cp -rdan cp -a. Apa yang dimaksud "rekursif" dalam hal menyalin file dari folder?

Randy
sumber
62
beberapa orang mencari penjelasan yang lebih baik pada halaman manual karena tidak selalu jelas apa arti deskripsi tersebut. Saya harus menggali berkali-kali dan menguji / eksperimen untuk mencari tahu apa yang sebenarnya terjadi dengan perintah tertentu. Halaman manual grep dapat membingungkan saya kapan saja.
Joe
2
Saya dapat memahami frustrasi Anda, tetapi saya kira, cara terbaik untuk belajar adalah dengan mencoba dan bereksperimen.
lipat
37
ATAU pelajari dengan mengajukan pertanyaan di sini, dapatkan jawabannya dengan cara yang Anda pahami, dan kemudian miliki pemahaman yang lebih baik tentang apa dan bagaimana menguji dan bereksperimen. Harap diingat bahwa ini berfungsi untuk Anda sangat sering tidak bekerja untuk saya, dll.
Will Lanni

Jawaban:

198

Rekursif berarti cpmenyalin isi direktori, dan jika direktori memiliki subdirektori, mereka juga disalin (secara rekursif). Tanpa -R, cpperintah akan melompati direktori. -ridentik dengan -RLinux, berbeda dalam beberapa kasus tepi pada beberapa varian unix lainnya.

Secara default, cpmembuat file baru yang memiliki konten yang sama dengan file lama, dan izin yang sama tetapi dibatasi oleh umask ; salinannya bertanggal dari saat salinan, dan milik pengguna yang melakukan salinan. Dengan -popsi ini, salinan memiliki waktu modifikasi yang sama, waktu akses yang sama, dan izin yang sama seperti aslinya. Ini juga memiliki pemilik dan grup yang sama seperti aslinya, jika pengguna yang melakukan salinan memiliki izin untuk membuat file tersebut.

The -apilihan berarti -Rdan -p, ditambah beberapa pilihan pelestarian lainnya. Ia mencoba untuk membuat salinan yang sedekat mungkin dengan aslinya: pohon direktori yang sama, jenis file yang sama, konten yang sama, metadata yang sama (waktu, izin, atribut yang diperluas, dll.).

Gilles
sumber
35
Pada dasarnya, kecuali Anda menginginkan sesuatu yang istimewa, Anda tidak perlu -rkarena -a(untuk archive) selalu yang paling aman dan mungkin apa yang Anda harapkan terjadi.
ams
2
@ Ya, itu ringkasan yang bagus. Satu-satunya alasan umum untuk digunakan -radalah karena Anda menggunakan varian unix selain Linux yang tidak dimiliki -a, dan umumnya Anda gunakan cp -rp. Atau rsync -a.
Gilles
terkadang izin akan mengizinkan -r tetapi tidak -a
DrCord
Tidak -r, tidak -R tidak bekerja di Ubuntu 18
Arkady
16

Opsi -r atau -R untuk "rekursif" berarti akan menyalin semua file termasuk file di dalam subfolder.

Opsi -a seperti yang tercantum adalah sama dengan -dR yang artinya akan melestarikan tautan serta menyalin isi subdirektori. Apa yang dimaksud dengan mempertahankan tautan adalah bahwa tautan itu tidak akan mengikuti tautan karena penyalinannya secara rekursif.

Joe
sumber