このトピックに関する以前の質問には、Linuxの回答が含まれていますが、Solaris10では機能しません。
find . ! -readable -Prune
-読み取り可能はPOSIXではないため、solarisでは機能しません。
Solarisの「find」からすべての「permissiondenied」メッセージを除外するPOSIX準拠のコマンドとは何ですか?
正解:jlliagreとrandom832が正解しました。
読み取り不可能なディレクトリを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
で利用可能であることに注意してください。
それらを除外するだけです。
find . 2>&1 | grep -v "^find: cannot read dir .*: Permission denied$"
すべてのファイルに対してサブシェルを呼び出さないようにしたい場合は、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