나는 종종 작업을 재귀적으로 적용하고 싶습니다. grep과 같은 일부 명령은 소문자 r을 사용하여 재귀를 나타냅니다. 예를 들어
grep -r foo .
다른 명령은 대문자 R을 선호하는 것 같습니다.
chmod -R 755 .
나는 종종 이것을 잘못 이해하고 어느 것이 어느 것인지 잊어버립니다. 이러한 주장에 대한 사례 선택 뒤에 어떤 논리가 있습니까?
답변1
재귀 디렉터리 탐색 옵션( ls
, chmod
, , chgrp
, chmod
, cp
, )이 있는 대부분의 rm
POSIX 명령에는 -R
이 기능이 있습니다.
rm
예, -r
POSIX 이전에는 원래 그랬기 때문입니다.
이제 트리를 탐색하는 동안 심볼릭 링크가 발견되면 동작이 달라집니다. POSIX는 사용자가 심볼릭 링크를 처리하는 방법을 결정할 수 있는 기회를 제공하기 위해 // 옵션을 추가하고 지정하지 않은 경우 기본값을 그대로 유지하여 -L
일관성을 유지하려고 노력했습니다.-H
P
POSIX에는 또는 grep
가 없습니다 .-r
-R
GNU는 grep
원래 둘 다 없었습니다. -r
1998년에 추가되었습니다. 이것은 심볼릭 링크 이후입니다.
-R
다른 유틸리티와의 일관성을 위해 2001년에 동의어로 추가되었습니다. 그것은 여전히 심볼릭 링크를 따릅니다.
2012년(grep 2.12)에서는 -r
더 이상 심볼릭 링크를 따르지 않도록 변경되었습니다. 아마도 grep이 다른 목적으로 사용 -L
되었기 때문일 것입니다.-H
BSD는 grep
오랫동안 GNU grep을 기반으로 했습니다. 그들 중 일부는 자체 버전을 다시 작성했으며 GNU와의 호환성을 어느 정도 유지했습니다 grep
. Apple OS/X는 심볼릭 링크 문제를 다르게 해결합니다. 동일하며 심볼릭 링크를 따르지 않습니다 -r
. 그러나 심볼릭 링크를 따라가는 // ' 옵션 과 유사하게 작동하는 옵션이 -R
있습니다 .-S
chmod
cp
find
-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]를 주의하세요.”