Command
-r 和 -R 的區別
我經常想遞歸地應用一個操作。一些命令,例如 grep,使用小寫的 r 來表示遞歸。例如
grep -r foo .
其他命令似乎更喜歡大寫的 R:
chmod -R 755 .
我經常把這些弄錯了,忘記了哪個是哪個。為這些論點選擇案例背後有什麼邏輯嗎?
大多數具有遞歸目錄遍歷選項(
ls
,chmod
,chgrp
,chmod
,cp
,rm
)-R
的 POSIX 命令都具有此功能。
rm
也有-r
,因為那是它最初的樣子,早在 POSIX 之前。現在,當在樹下行走時發現符號連結時,行為會有所不同。POSIX 嘗試通過添加
-L
/-H
/P
選項來使事情保持一致,以便使用者有機會決定如何處理符號連結,當沒有提供未指定時保留預設值。POSIX
grep
沒有-r
or-R
。GNU
grep
最初兩者都沒有。-r
是在 1998 年添加的。那是在符號連結之後。
-R
為了與其他實用程序保持一致,在 2001 年將其添加為同義詞。那仍然遵循符號連結。在 2012 年(grep 2.12),
-r
已更改,因此不再遵循符號連結,可能是因為-L
,-H
已用於其他用途。BSD
grep
長期以來一直基於 GNU grep。他們中的一些人已經重寫了他們自己的並且或多或少地保持了與 GNU 的兼容性grep
。Apple OS/X 以不同的方式解決了符號連結問題。-r
並且-R
是相同的並且不遵循符號連結。然而,有一個-S
選項類似於chmod
/cp
/find
的-L
選項來遵循符號連結。