HP Unixでは、次のコマンドを使用して大容量ファイルを検索しています。
find . -type f -size +100000000c -exec ls -lrt {} \;
結果は次のとおりです。
-rw-rw-rw- 1 qa1wrk32 test 169263642 Oct 27 12:28 ./rgs/test/qa1wrk32/DB/Dmp/intrefbl01_20111027_Backup_for_qa1ref32_CNSTRNO.dmp.gz
-rw-rw-rw- 1 qa1wrk32 test 173779937 Oct 24 16:33 ./rgs/test/qa1wrk32/DB/Dmp/qa1ref32_20111024_Backup_before_Refresh.dmp.gz
-rw-rw-rw- 1 qa1wrk32 test 105020030 Oct 31 09:53 ./rgs/test/qa1wrk32/DB/Dmp/qa1app32_20111031_R112_Before_CopyBan_from_INT01_to_ENV32_for_LISA_CNSTRNO.dmp.gz
find: cannot open ./rgs/test/maes32/master/.ssh
find: cannot open ./rgs/test/qa1oln32/.ssh
find: cannot open ./rgs/test/qa1oln32/local_tlg/bin/.adm
find: cannot search ./rgs/test/qa1wrk91/mail
私は検索できない、または開くことができない出力ラインを探したくありません。フィルタリングする方法はありますか?より良いことは、特定の権限セットを持つfind
ファイルを検索できることです。
答え1
find
エラーstderr
を無視したい場合は、最も簡単な方法は次のとおりです。
find ... 2> /dev/null
find
-perm
権限に基づいてフィルタリングするオプションもあります。
答え2
特定の権限を持つファイルを検索するように指示できますが、find
まったく必要ではありません。find
閲覧する権限がないディレクトリは、閲覧しないように指示する必要があります。実際にfind
ディレクトリ(ホームディレクトリ)に移動しないように言うのは簡単ですが、-prune
閲覧する権限がないディレクトリを一致させる簡単な方法はありません。存在する牛に似た一種の栄養find
、書くことはできますが-readable -executable
、基準find
そのようなオプションはありません(HP-UXfind
)。
権限に基づいてアクセス権を再構築できますが、簡単ではありません。 ACLがあるシステム(HP-UXにはACLがある)では、次の点も考慮する必要があります。
find . -type d \
\! \( -user $(id -u) -perm -u+rx -o \
\( -group $(id -G | sed 's/ / -o -group /g') \) -perm -g+rx -o \
-perm -a+rx \) -prune -o \
-type f -size +100000000c -exec …
実際、これが仕事にとって重要なスクリプトではない限り、次のことをしたいと思います。次のエラーを無視してください。find
。 (業務上重要なスクリプトの場合は、PerlやPythonなどのエラー条件をより適切にフィルタリングできる他の言語で作成してください。)