Command

-r 和 -R 的區別

  • August 23, 2019

我經常想遞歸地應用一個操作。一些命令,例如 grep,使用小寫的 r 來表示遞歸。例如

grep -r foo .

其他命令似乎更喜歡大寫的 R:

chmod -R 755 .

我經常把這些弄錯了,忘記了哪個是哪個。為這些論點選擇案例背後有什麼邏輯嗎?

大多數具有遞歸目錄遍歷選項(ls, chmod, chgrp, chmod, cp, rm-R的 POSIX 命令都具有此功能。

rm也有-r,因為那是它最初的樣子,早在 POSIX 之前。

現在,當在樹下行走時發現符號連結時,行為會有所不同。POSIX 嘗試通過添加-L/ -H/P選項來使事情保持一致,以便使用者有機會決定如何處理符號連結,當沒有提供未指定時保留預設值。

POSIXgrep沒有-ror -R

GNUgrep最初兩者都沒有。-r是在 1998 年添加的。那是在符號連結之後。

-R為了與其他實用程序保持一致,在 2001 年將其添加為同義詞。那仍然遵循符號連結。

在 2012 年(grep 2.12),-r已更改,因此不再遵循符號連結,可能是因為-L,-H已用於其他用途。

BSDgrep長期以來一直基於 GNU grep。他們中的一些人已經重寫了他們自己的並且或多或少地保持了與 GNU 的兼容性grep。Apple OS/X 以不同的方式解決了符號連結問題。-r並且-R是相同的並且不遵循符號連結。然而,有一個-S選項類似於chmod/ cp/find-L選項來遵循符號連結。

引用自:https://unix.stackexchange.com/questions/154599