-r 和 -R 的区别

-r 和 -R 的区别

我经常想递归地应用一个操作。某些命令(例如 grep)使用小写 r 来指示递归。例如

grep -r foo .

其他命令似乎更喜欢大写 R:

chmod -R 755 .

我经常把这些弄错,忘记哪个是哪个。这些论证的案例选择背后有什么逻辑吗?

答案1

大多数具有递归目录遍历选项(lschmodchgrpchmodcprm)的 POSIX 命令都具有-R此功能。

rm也有,-r因为这就是它最初的样子,早在 POSIX 之前。

现在,当沿着树走下去时发现符号链接时,行为会有所不同。 POSIX 试图通过添加-L//选项来使事情保持一致-HP让用户有机会决定如何处理符号链接,在没有提供未指定的情况下保留默认值。

POSIXgrep没有-r-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跟随符号链接的选项。

答案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] 保持谨慎。”

相关内容