cp -r
dimaksudkan untuk menyalin file secara rekursif, dan cp -R
untuk menyalin direktori secara rekursif. Tapi saya sudah memeriksa, dan keduanya muncul untuk menyalin file dan direktori, hal yang sama. Jadi, apa bedanya sebenarnya?
60
Jawaban:
Meskipun
-R
posix didefinisikan dengan baik,-r
tidak portabel!Di Linux, dalam implementasi GNU dan BusyBox
cp
,-r
dan-R
setara.Di sisi lain, seperti yang dapat Anda baca di halaman manual POSIX
cp
,-r
perilaku didefinisikan oleh implementasi .sumber
-r
akan menyalin file nyata yang ditunjukkan oleh tautan simbolik sementara-R
akan menyalin tautan simbolik yang memang sering dimaksudkan.Perbedaannya adalah bahwa yang satu menggunakan huruf kecil "R" dan yang lain menggunakan huruf "R". Di luar itu, tidak ada perbedaan. Hal yang sama jika Anda menggunakan
--recursive
opsi panjang.sumber
cp
sebenarnya ada perbedaan. Lihat jawaban Random832 . @Ignacio Anda harus menyertakan kualifikasi dalam jawaban ini yang mengatakan "jika Andacp
adalah implementasi GNU modern" atau sesuatu seperti itu.-R
hanya menggunakan saja, dan pada kenyataannya beberapa halaman manual pada sistem yang baru saja disebutkan juga merekomendasikan hal itu.Huruf kecil
-r
adalah opsi yang lebih lama, diperkenalkan pada 4.1BSD, yang hanya akan menyalin semua direktori non-file. Artinya, jika menemui perangkat atau FIFO, itu akan membukanya, membaca konten, dan membuat file di tujuan dengan konten.Huruf besar
-R
adalah pilihan standar (diperkenalkan ke BSD di 4.4BSD, meskipun versi sebelumnya memilikinya sebagai sinonim-r
) yang akan, pada pertemuan perangkat, FIFO, atau file khusus lainnya, membuat file khusus yang setara di tujuan.Banyak implementasi masih mempertahankan perbedaan ini, tetapi beberapa (termasuk versi GNU khas Linux) hanya menyediakan
-R
semantik,-r
sebagai sinonim.sumber
Dalam OS X dan FreeBSD versi lama
-r
seperti-R -L --copy-contents
di coreutils, atau mengikuti symlink dan membaca isi file khusus dan FIFO.mkdir a;touch b;ln -s $PWD/b a;cp -r a c
mengganti symlink dengan file target di OS X,mkdir a;mkfifo a/b;cp -r a c
diblokir membaca FIFO, danmkdir a;ln -s /dev/zero a;cp -r a b
mulai mengisib/zero
dengan nol.Dari
cp
halaman manual di OS X dan FreeBSD versi lama:Dalam versi baru FreeBSD
-r
setara dengan-RL
:http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :
sumber
salah satu perbedaan saya menemukan bahwa -r tidak menyalin direktori tersembunyi sementara -R menyalin direktori tersembunyi.
Saya mengujinya. Direktori git di direktori target dan sampai pada kesimpulan di atas. Saya menggunakan centOS saat ini.
Saya mungkin salah tetapi terbuka untuk diskusi.
sumber
-r
dan-R
keduanya menyalin direktori tersembunyi