Mientras -R
es posix bien definido, -r
¡no es portátil!
En Linux, en las implementaciones GNU y BusyBox de cp
, -r
y -R
son equivalentes.
Por otro lado, como se puede leer en la página del manual POSIX de cp
, -r
el comportamiento está definido por la implementación .
* 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.
Minúsculas -r
era una opción más antigua, introducida en 4.1BSD, que simplemente copiaba todos los que no eran directorios como archivos. Es decir, si encuentra un dispositivo o FIFO, lo abre, lee el contenido y crea un archivo en el destino con el contenido.
Mayúsculas -R
era una opción estandarizada (introducida en BSD en 4.4BSD, aunque versiones anteriores la tenían como sinónimo de -r
) que, al encontrar un dispositivo, FIFO u otro archivo especial, crearía un archivo especial equivalente en el destino.
Muchas implementaciones aún mantienen esta distinción, pero algunas (incluida la versión GNU típica de Linux) solo proporcionan el -R
semántica, con -r
como sinónimo.
La diferencia es que uno usa una "R" minúscula y el otro usa una "R" mayúscula. Más allá de eso, no hay diferencia. Lo mismo si usas el --recursive
opción larga.