web-dev-qa-db-ja.com

Solarisの「検索」からすべての「許可が拒否されました」メッセージを除外するにはどうすればよいですか。

このトピックに関する以前の質問には、Linuxの回答が含まれていますが、Solaris10では機能しません。

find . ! -readable -Prune

-読み取り可能はPOSIXではないため、solarisでは機能しません。

Solarisの「find」からすべての「permissiondenied」メッセージを除外するPOSIX準拠のコマンドとは何ですか?

正解:jlliagreとrandom832が正解しました。

3
he wei

読み取り不可能なディレクトリをfindで削除するPOSIXの方法は次のとおりです。

find . \( -exec sh -c ' if [ ! -r "$1" ] ; then { exit 1 ; } ; else for i in "$1"/* ; do if [ -d "$i" -a ! -r "$i" ]; then exit 1; fi; done; fi ' sh {} \; -o -Prune \) -a -print

これが完全なSolarisインストールである場合、GNU grepは/usr/sfw/bin/ggrepで利用可能であることに注意してください。

6
jlliagre

それらを除外するだけです。

find . 2>&1 | grep -v "^find: cannot read dir .*: Permission denied$"
2
steve

すべてのファイルに対してサブシェルを呼び出さないようにしたい場合は、jlliagreの答えをこのように改良することで、さらに複雑にするACLがない限り、すべてをfind述語で行います。読み取り可能であるが検索可能ではないディレクトリを正しく処理することは、演習として残されています。 #!をこれまでに見たことがない場合は、「これをすべてコマンドラインにコピーしようとしないでください。代わりに、ファイルに逐語的にchmod +xして、呼び出してください。 ./nameoffile <directory>として。」

#! /usr/xpg4/bin/sh

PATH=/usr/local/bin:/usr/xpg4/bin:/usr/bin:/bin
export PATH

me="-user $(id -u)"
my_groups="( -group $(id -G | sed 's/ / -o -group /g') )"

Prune_me="( ( $me ! -perm -0400 ) -Prune )"
Prune_group="( ( ! $me $my_groups ! -perm -0040 ) -Prune )"
Prune_other="( ( ! $me ! $my_groups ! -perm -0004 ) -Prune )"

find "$@" $Prune_me -o $Prune_group -o $Prune_other -o -print
0
zwol