-rと-Rの違い

-rと-Rの違い

私はしばしばタスクを再帰的に適用したいと思います。 grepなどの一部のコマンドは、小文字のrを使用して再帰を表します。例えば

grep -r foo .

他のコマンドは大文字Rを好むようです。

chmod -R 755 .

私はしばしばこれを間違って理解し、どちらがどれであるかを忘れます。これらの主張のケース選択の背後にはどのようなロジックがありますか?

答え1

再帰ディレクトリナビゲーションオプション(、、、、、、、、ls)を持つほとんどのPOSIXコマンドには、この機能があります。chmodchgrpchmodcprm-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]に注意してください。

関連情報