-r과 -R의 차이점

-r과 -R의 차이점

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

grep -r foo .

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

chmod -R 755 .

나는 종종 이것을 잘못 이해하고 어느 것이 어느 것인지 잊어버립니다. 이러한 주장에 대한 사례 선택 뒤에 어떤 논리가 있습니까?

답변1

재귀 디렉터리 탐색 옵션( ls, chmod, , chgrp, chmod, cp, )이 있는 대부분의 rmPOSIX 명령에는 -R이 기능이 있습니다.

rm예, -rPOSIX 이전에는 원래 그랬기 때문입니다.

이제 트리를 탐색하는 동안 심볼릭 링크가 발견되면 동작이 달라집니다. POSIX는 사용자가 심볼릭 링크를 처리하는 방법을 결정할 수 있는 기회를 제공하기 위해 // 옵션을 추가하고 지정하지 않은 경우 기본값을 그대로 유지하여 -L일관성을 유지하려고 노력했습니다.-HP

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

GNU는 grep원래 둘 다 없었습니다. -r1998년에 추가되었습니다. 이것은 심볼릭 링크 이후입니다.

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

2012년(grep 2.12)에서는 -r더 이상 심볼릭 링크를 따르지 않도록 변경되었습니다. 아마도 grep이 다른 목적으로 사용 -L되었기 때문일 것입니다.-H

BSD는 grep오랫동안 GNU grep을 기반으로 했습니다. 그들 중 일부는 자체 버전을 다시 작성했으며 GNU와의 호환성을 어느 정도 유지했습니다 grep. Apple OS/X는 심볼릭 링크 문제를 다르게 해결합니다. 동일하며 심볼릭 링크를 따르지 않습니다 -r. 그러나 심볼릭 링크를 따라가는 // ' 옵션 과 유사하게 작동하는 옵션이 -R있습니다 .-Schmodcpfind-L

답변2

전혀. 단지 개발자의 선택에 달려있습니다. 일반적으로 이는 및 둘 다 유효한 옵션 -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.-r지적작성자: @Arkadiusz Drabczykso), 따라서 실제로 사용할 수는 없습니다.

답변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

답변4

20년 전 UNIX를 배울 때 멘토가 이렇게 말했습니다. "재귀 옵션을 항상 대문자 R로 입력하는 것이 좋습니다. 일부 명령은 소문자 r 옵션에 대해 다른 의미를 가지지만 대문자 R은 대부분 재귀 옵션에 사용됩니다. R을 입력할 때 Shift 키를 누르는 습관이 생기므로 [rm * -Rf]를 주의하세요.”

관련 정보