-r과 -R의 차이점


32

종종 작업을 재귀 적으로 적용하려고합니다. grep과 같은 일부 명령은 소문자 r을 사용하여 재귀를 나타냅니다. 예를 들어

grep -r foo .

다른 명령은 대문자 R을 선호하는 것 같습니다.

chmod -R 755 .

나는 끊임없이 잘못된 길을 가고 있으며 어느 것을 잊어 버리고 있습니다. 이러한 주장에 대한 사례 선택 뒤에 논리가 있습니까?


1
"코더들은 그것이 합리적이라고 생각했기 때문에." (이것이 타당한 이유는 아니지만 사실 일 것입니다.)
HalosGhost

1
가치가있는 것은 많은 명령이 이해하지 못하는 것처럼 보이지만 --recursive잘못된 일을하지는 않습니다.
Tanner Swett

4
chmod의 경우 -r모든 레벨에 대해 읽기 비트를 설정 해제하는 수단 이기 때문입니다.
HorusKol

답변:


37

재귀 디렉토리 탐색 옵션이 대부분의 POSIX 명령 ( ls, chmod, chgrp, chmod, cp, rm)가 -R그것을 위해.

rm-rPOSIX 이전의 것이기 때문 이기도 합니다.

이제 나무를 걸어 내려갈 때 심볼릭 링크가 발견되면 동작이 달라집니다. POSIX는 -L/ -H/ P옵션을 추가하여 지정하지 않은 경우 기본값을 유지하지 않고 심볼릭 링크를 사용하여 수행 할 작업을 결정할 수있는 기회를 제공 함으로써 일관된 작업을 시도했습니다 .

POSIX grep에는 -r또는 이 없습니다 -R.

GNU는 grep처음에는 아무것도 없었습니다. -r1998 년에 추가되었습니다.

-R2001 년에 다른 유틸리티와의 일관성을 위해 동의어로 추가되었습니다. 그것은 여전히 ​​심볼릭 링크를 따르고있었습니다.

2012 (그렙 2.12)에서 -r더 이상 가능성이 있기 때문에, 심볼릭 링크를 따라하지 않도록 변경되었습니다 -L, -H이미 다른 것을 사용 하였다.

BSD grep는 오랫동안 GNU grep을 기반으로했습니다. 그들 중 일부는 독자적으로 재 작성했으며 GNU와의 호환성을 어느 정도 유지했습니다 grep. Apple OS / X는 symlink 문제를 다르게 해결했습니다. -r-R동일하며 심볼릭 링크를 따르지 않습니다. 있다 -S같은 역할을하지만 옵션 chmod/ cp/ find-L심볼릭 링크를 따르지 옵션.


13
TL; DR : 역사.
Sammitch

10
초기 역사 : rm다른 사람들보다 재귀 적 인 옵션이있었습니다. 이었다 -r. 그런 다음 cp일치 -r합니다. 그런 다음 ls재귀 옵션을 원했지만 ls -r이미 "역순 정렬"을 의미했기 때문에이어야했습니다 -R. 이 긴장 사이 -R-r시작했다. -R모든 관련 유틸리티에 일관되게 추가 할 수있는 유일한 도구 였지만 rm -r이미 잘 알려진 전통적인 사용법이었습니다. 그리고 GNU가 등장하여 "일관성과 전통은 정사각형입니다!"

8

아무것도 아닙니다. 단순히 개발자가 선택한 것에 따라 다릅니다. 모두 있기 때문에 자주 -r하고 -R유효한 옵션이 있습니다. 인용 한 프로그램에서 예를 들면 다음과 같습니다.

  • 최신 버전의 GNU grep:

    -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links  only  if they are on the command line.  This is
          equivalent to the -d recurse option.
    
    -R, --dereference-recursive
          Read all files under each directory,  recursively.   Follow  all
          symbolic links, unlike -r.
    
  • chmod-r옵션 이 없으므로 아마도 개발자는 선호합니다 -R. 그러나 @Arkadiusz Drabczykso가 지적한-r 유효한 권한 문자열 이므로 실제로 사용할 수 없습니다.


당신의 grep버전 은 무엇입니까 ? GNU grep 2.12 -r-R동일합니다. chmod를 사용하면 -RPOSIX에 의해 정의됩니다.
cuonglm

@Gnouc grep (GNU grep) 2.15와 나는 이전 버전에서 이것을 보았던 것을 기억합니다. 귀하의 경우가 아닙니까? 대부분의 경우 본질적으로 동일한 결과를 제공하며 링크와는 다르게 작동합니다. 에 관해서는 chmod, 그것은 잘 POSIX에 의해 정의 될 수 있지만, 원래 때문에 즉, 아마도, 여전히 chmoddevs를 선택한 R이상 r.
terdon

2
@Gnouc D' oh! 분명히 -r유효한 권한 문자열이므로 사용할 수 없었습니다 .
terdon

3

대부분 개발자 개인 취향에 달려 있습니다. 그러나 개발자가 재귀 적으로 운영하는 것보다 더 중요하다고 생각하는 다른 소문자 옵션을 선호하는 경우 대문자 옵션이 선택되는 경우가 있습니다. chmod의 경우-r 유효한 모드입니다. 예를 들면 다음과 같습니다.

$ ll FILE
-rw-r--r-- 1 ja ja 0 Sep  9 16:42 FILE
$ chmod -r FILE
$ ll FILE
--w------- 1 ja ja 0 Sep  9 16:42 FILE

1

나는 끊임없이 잘못된 길을 가고 있으며 어느 것을 잊어 버리고 있습니다.

가능하면 이러한 유틸리티의 GNU 버전을 사용하면 더 긴 이름을 옵션으로 사용할 수 있습니다.

command --recursive

이러한 주장에 대한 사례 선택 뒤에 논리가 있습니까?

아니.

또는별로. 유닉스 유틸리티는 단편적으로 개발되었으며 명령 옵션은 리드 또는 단독 개발자의 개별 선택을 반영합니다. 26 개의 ASCII 소문자 옵션 문자 만 사용할 수 있으며 선호하는 세트입니다 (명령은 일반적으로 입력하기 쉽도록 소문자 임).이 제한된 세트는 니모닉 충돌을 일으 킵니다. 새로운 버전의 명령 / 유틸리티에 새로운 기능추가 되면서 충돌로 인해 불일치가 발생했습니다 .


-1

20 년 전에 유닉스를 배웠을 때 저의 멘토는 다음과 같이 말했습니다 : "대문자 R에 재귀 옵션을 입력하는 것이 좋습니다. 일부 명령은 소문자 r 옵션에 다른 의미를 갖지만 대문자 R은 대부분 재귀 옵션으로 작동합니다. "R을 입력 할 때 Shift 키를 누르는 것을 귀찮게하여 [rm * -Rf]에주의를 기울이는 것이 좋습니다."


2
비표준 옵션은 도구 구현마다 다를 수 있으므로 사용중인 특정 시스템의 명령에 대한 매뉴얼을 읽으라고 말하면 더 좋을 것입니다.
Kusalananda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.