cp -rdimaksudkan untuk menyalin file secara rekursif, dan cp -Runtuk menyalin direktori secara rekursif. Tapi saya sudah memeriksa, dan keduanya muncul untuk menyalin file dan direktori, hal yang sama. Jadi, apa bedanya sebenarnya?
cp -rdimaksudkan untuk menyalin file secara rekursif, dan cp -Runtuk menyalin direktori secara rekursif. Tapi saya sudah memeriksa, dan keduanya muncul untuk menyalin file dan direktori, hal yang sama. Jadi, apa bedanya sebenarnya?
Jawaban:
Meskipun -Rposix didefinisikan dengan baik, -rtidak portabel!
Di Linux, dalam implementasi GNU dan BusyBox cp, -rdan -Rsetara.
Di sisi lain, seperti yang dapat Anda baca di halaman manual POSIXcp , -rperilaku didefinisikan oleh implementasi .
* If neither the -R nor -r options were specified, cp shall take actions based on the type and contents of the file referenced by the symbolic link, and not by the symbolic link itself. * If the -R option was specified: * If none of the options -H, -L, nor -P were specified, it is unspecified which of -H, -L, or -P will be used as a default. * If the -H option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand. * If the -L option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand or any symbolic links encoun- tered during traversal of a file hierarchy. * If the -P option was specified, cp shall copy any symbolic link specified as a source_file operand and any symbolic links encoun- tered during traversal of a file hierarchy, and shall not follow any symbolic links. * If the -r option was specified, the behavior is implementation- defined.
-rakan menyalin file nyata yang ditunjukkan oleh tautan simbolik sementara -Rakan 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 --recursiveopsi panjang.
cpsebenarnya ada perbedaan. Lihat jawaban Random832 . @Ignacio Anda harus menyertakan kualifikasi dalam jawaban ini yang mengatakan "jika Anda cpadalah implementasi GNU modern" atau sesuatu seperti itu.
-Rhanya menggunakan saja, dan pada kenyataannya beberapa halaman manual pada sistem yang baru saja disebutkan juga merekomendasikan hal itu.
Huruf kecil -radalah 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 -Radalah 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 -Rsemantik, -rsebagai sinonim.
Dalam OS X dan FreeBSD versi lama -rseperti -R -L --copy-contentsdi coreutils, atau mengikuti symlink dan membaca isi file khusus dan FIFO.
mkdir a;touch b;ln -s $PWD/b a;cp -r a cmengganti symlink dengan file target di OS X, mkdir a;mkfifo a/b;cp -r a cdiblokir membaca FIFO, dan mkdir a;ln -s /dev/zero a;cp -r a bmulai mengisi b/zerodengan nol.
Dari cphalaman manual di OS X dan FreeBSD versi lama:
Historic versions of the cp utility had a -r option. This implementation
supports that option; however, its use is strongly discouraged, as it
does not correctly copy special files, symbolic links, or fifo's.
Dalam versi baru FreeBSD -rsetara dengan -RL:
Historic versions of the cp utility had a -r option. This implementation
supports that option, however, its behavior is different from historical
FreeBSD behavior. Use of this option is strongly discouraged as the
behavior is implementation-dependent. In FreeBSD, -r is a synonym for
-RL and works the same unless modified by other flags. Historical imple-
mentations of -r differ as they copy special files as normal files while
recreating a hierarchy.
http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :
--copy-contentsJika menyalin secara rekursif, salin konten file khusus apa pun (misalnya, FIFO dan file perangkat) seolah-olah itu file biasa. Ini berarti mencoba membaca data di setiap file sumber dan menulisnya ke tujuan. Biasanya merupakan kesalahan untuk menggunakan opsi ini, karena biasanya memiliki efek yang tidak diinginkan pada file khusus seperti FIFO dan yang biasanya ditemukan dalam
/devdirektori. Dalam kebanyakan kasus,cp -R --copy-contentsakan menggantung tanpa batas mencoba membaca dari FIFOs dan file khusus seperti/dev/console, dan itu akan mengisi disk tujuan Anda jika Anda menggunakannya untuk menyalin/dev/zero. Opsi ini tidak memiliki efek kecuali menyalin secara rekursif, dan itu tidak mempengaruhi penyalinan tautan simbolik.
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.
-rdan -Rkeduanya menyalin direktori tersembunyi