キーワードを検索し、ファイルの内容にキーワードを含むファイル名を印刷するスクリプトは何ですか?次のようなことを試しましたが、うまくいきません。
(find . -name '*.sas' -prune -type f -exec grep 'Carhart' > /dev/tty) >& /dev/null
このスクリプトは2つの条件を満たしています。
- SPARC-Enterprise の Solaris で tcsh で実行され、POSIX 認証を受けました。
- 検索および/または読み取り権限を持たないディレクトリには「許可拒否」行は生成されません。 ( / -name '*.sas' -prune > /dev/tty 検索) > & /dev/null
操作時に権限拒否エラーは報告されないため、 ( find / -name '*.sas' -prune > /dev/tty ) > & /dev/null
この単純な行を修正してgrepをマージするにはどうすればよいですか?
答え1
grepにファイル名のみを印刷させるには、この-l
オプションを渡します。正規表現の代わりに部分文字列を検索するには、この-F
オプションを渡します。
名前が特定のパターンと一致するファイルを繰り返し検索するには、find
with-type f
とを使用します。 grepを呼び出すために使用されます。-name PATTERN
-exec
find . -name '*.sas' -type f -exec grep -F -l 'Carhart' {} +
巡回を許可しないディレクトリで発生するエラーを回避するには、and(正しく取得するのが難しく、ACLがある場合は機能しません)を使用して権限を解析するか、呼び出し(-perm
これは遅いため遅い)を使用できます。外部プログラムですが、より安定しています)。-user
-group
test
find . -type d ! -exec test -r {} -a -x {} \; -prune -o \
-name '*.sas' -type f -exec test -r {} \; -exec grep -F -l 'Carhart' {} +