-r과 -R의 차이점 들어 grep -r foo . 다른 명령은 대문자

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

grep -r foo .

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

chmod -R 755 .

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



답변

재귀 디렉토리 탐색 옵션이 대부분의 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심볼릭 링크를 따르지 옵션.


답변

아무것도 아닙니다. 단순히 개발자가 선택한 것에 따라 다릅니다. 모두 있기 때문에 자주 -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 유효한 권한 문자열 이므로 실제로 사용할 수 없습니다.


답변

대부분 개발자 개인 취향에 달려 있습니다. 그러나 개발자가 재귀 적으로 운영하는 것보다 더 중요하다고 생각하는 다른 소문자 옵션을 선호하는 경우 대문자 옵션이 선택되는 경우가 있습니다. 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


답변

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

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

command --recursive

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

아니.

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


답변

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


답변