TL;DR

  • GNU coreutils에서는 -r과 -R이 모두 디렉터리를 재귀적으로 복사하는 옵션이며, 과거에는 동작에 차이가 있었지만 2002년 병합 이후 동일함.
  • 1992년 GNU coreutils 최초 커밋에서 -r은 복사 대상을 일반 파일처럼 처리했고, -R은 그렇지 않았음.
  • OpenBSD 7.9는 매뉴얼에서 -R만 나열하고 -r 사용을 강하게 권하지 않으며, 두 옵션의 동작 차이를 명시함.
  • NetBSD 11도 매뉴얼과 코드에서 OpenBSD와 같은 방식을 취함.
  • -R은 chown 등 다른 유틸리티의 재귀 옵션과 일관되며, POSIX.1-2024도 -R을 권장하고 -r은 표준에서 제외함.

GNU coreutils의 `-r`과 `-R`

  • 요즘 GNU coreutils에서는 두 옵션에 차이가 없으며, 현재 매뉴얼은 -R, -r, --recursive를 함께 제시하고 모두 디렉터리를 재귀적으로 복사한다고 설명함.
  • 1992년 GNU coreutils 최초 커밋의 src/cp.c에서는 -r을 선택하면 재귀 복사를 활성화하고 복사 대상을 일반 파일처럼 처리하도록 설정했으며, -R을 선택하면 재귀 복사만 활성화했음.
  • 따라서 당시에는 두 옵션의 동작 차이가 있었지만, 2002년 두 옵션이 병합되어 오늘날에는 그 차이가 없으며, 24년 전 버전의 coreutils를 사용하는 경우도 없음.

OpenBSD와 NetBSD

  • OpenBSD 7.9 매뉴얼은 -R만 나열하고 -r 사용을 강하게 권하지 않음. 다만 -r이 여전히 -R과 다르게 동작한다고 명시함.
  • OpenBSD 코드를 살펴보면 Rflag과 rflag에서 몇 가지 차이를 확인할 수 있음.
  • NetBSD 11도 매뉴얼과 코드에서 OpenBSD와 같은 방식을 취함.

`-R`을 권장하는 이유

  • -R의 장점은 여러 유틸리티에서 옵션 표기가 더 일관적이라는 점임. 예를 들어 chown은 -R을 지원하지만 -r은 지원하지 않음.
  • POSIX도 이러한 일관성을 인정하며 -R을 권장함.

이 표준의 이전 판본은 파일 계층을 복사하는 -r 옵션을 지원했음. -r 옵션은 BSD 및 BSD 파생 시스템에서 역사적으로 사용된 방식임. 이 옵션은 POSIX.1-2024에서 더 이상 규정하지 않지만 일부 구현에는 남아 있을 수 있음. -R 옵션은 -r과 거의 동의어로 추가됐으며, POSIX.1-2024의 다른 재귀 디렉터리 탐색 옵션과 일관성을 갖추도록 선택됐음.