忽略找到的文件无法搜索或打开?

忽略找到的文件无法搜索或打开?

我在 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 无法搜索或打开或其他任何内容的输出行。有没有办法过滤掉它们?更好的是,我可以find搜索具有某些权限集的文件吗?

答案1

find将错误打印到stderr.如果您只想忽略它们,最简单的方法是:

find ... 2> /dev/null

find还可以-perm选择根据权限进行过滤。

答案2

您可以告诉find搜索具有特定权限的文件,但这并不完全是您所需要的。您需要告诉find不要探索您无权遍历的目录。实际上很容易告诉find不要进入一个目录——它是-prune主目录——但是没有简单的方法来匹配您无权遍历的目录。在GNUfind,你可以写-readable -executable,但是标准find没有这样的选项(也没有惠普-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。)

相关内容