アクセスできないディレクトリに対するエラーのないPOSIX準拠の再帰的なgrep

アクセスできないディレクトリに対するエラーのないPOSIX準拠の再帰的なgrep

キーワードを検索し、ファイルの内容にキーワードを含むファイル名を印刷するスクリプトは何ですか?次のようなことを試しましたが、うまくいきません。

(find . -name '*.sas' -prune -type f -exec grep 'Carhart' > /dev/tty) >& /dev/null

このスクリプトは2つの条件を満たしています。

  1. SPARC-Enterprise の Solaris で tcsh で実行され、POSIX 認証を受けました。
  2. 検索および/または読み取り権限を持たないディレクトリには「許可拒否」行は生成されません。 ( / -name '*.sas' -prune > /dev/tty 検索) > & /dev/null

操作時に権限拒否エラーは報告されないため、 ( find / -name '*.sas' -prune > /dev/tty ) > & /dev/nullこの単純な行を修正してgrepをマージするにはどうすればよいですか?

答え1

grepにファイル名のみを印刷させるには、この-lオプションを渡します。正規表現の代わりに部分文字列を検索するには、この-Fオプションを渡します。

名前が特定のパターンと一致するファイルを繰り返し検索するには、findwith-type fとを使用します。 grepを呼び出すために使用されます。-name PATTERN-exec

find . -name '*.sas' -type f -exec grep -F -l 'Carhart' {} +

巡回を許可しないディレクトリで発生するエラーを回避するには、and(正しく取得するのが難しく、ACLがある場合は機能しません)を使用して権限を解析するか、呼び出し(-permこれは遅いため遅い)を使用できます。外部プログラムですが、より安定しています)。-user-grouptest

find . -type d ! -exec test -r {} -a -x {} \; -prune -o \
       -name '*.sas' -type f -exec test -r {} \; -exec grep -F -l 'Carhart' {} +

関連情報