Bash 筛选出可能无法读取文件的结果/查看目录内容

Bash 筛选出可能无法读取文件的结果/查看目录内容,bash,find,Bash,Find,例如: find / * 给我所有的文件和目录,但是我只想要那些我可以阅读的文件和那些我可以看到其内容的目录。否则,当我尝试查找所有文件的文件信息时,会遇到问题: for i in ls $( find / * ); do file $i; done 其结果是: find: /lost+found: Permission denied find: /proc/tty/driver: Permission denied find: /proc/1/task/1/fd: Permission d

例如:

find / *
给我所有的文件和目录,但是我只想要那些我可以阅读的文件和那些我可以看到其内容的目录。否则,当我尝试查找所有文件的文件信息时,会遇到问题:

for i in ls $( find / * ); do file $i; done
其结果是:

find: /lost+found: Permission denied
find: /proc/tty/driver: Permission denied
find: /proc/1/task/1/fd: Permission denied
find: /proc/1/fd: Permission denied
find: /proc/2/task/2/fd: Permission denied
find: /proc/2/fd: Permission denied
find: /proc/3/task/3/fd: Permission denied
# and so on ...

如果可能的话,我希望以一种通用的方式使用它,这样我就可以使用相同的命令行,而不管我是以哪个用户的身份登录的,但仍然可以从find中获得我可能看到的那些文件和目录。

使用
-readable
选项来
查找
(假设使用GNU的现代系统):

匹配可读的文件。 这考虑了访问权限 控制列表和其他权限 文物 -烫发测试忽略。此测试使用access(2)系统调用,以及 因此,可以被NFS服务器愚弄 进行UID映射(或根挤压), 由于许多系统都实现了访问(2) 在客户端的内核中,因此不能 利用UID映射 服务器上保存的信息

使用
-perm
和变体不起作用,因为它只查看文件的标志,而不查看这些标志是否允许您访问

如果您没有
-可读的
,可以通过这个简单的Perl脚本通过管道输出
find
,该脚本只输出提供的可读文件的文件名:

#!/usr/bin/perl -w

use POSIX qw[access];
use strict;

foreach (split(/\0/, <STDIN>)) {
    print $_ . "\0" if (POSIX::access($_, &POSIX::R_OK));
}

但请注意,这仍然会在
stderr
上生成输出错误,因为
find
尝试递归到它没有权限访问的目录中。
print0
用于
find
(和
xargs-0
)的选项用于确保系统在文件名中嵌入空格的情况下工作。

使用
-readable
选项来
查找
(假设使用GNU的现代系统):

匹配可读的文件。 这考虑了访问权限 控制列表和其他权限 文物 -烫发测试忽略。此测试使用access(2)系统调用,以及 因此,可以被NFS服务器愚弄 进行UID映射(或根挤压), 由于许多系统都实现了访问(2) 在客户端的内核中,因此不能 利用UID映射 服务器上保存的信息

使用
-perm
和变体不起作用,因为它只查看文件的标志,而不查看这些标志是否允许您访问

如果您没有
-可读的
,可以通过这个简单的Perl脚本通过管道输出
find
,该脚本只输出提供的可读文件的文件名:

#!/usr/bin/perl -w

use POSIX qw[access];
use strict;

foreach (split(/\0/, <STDIN>)) {
    print $_ . "\0" if (POSIX::access($_, &POSIX::R_OK));
}

但请注意,这仍然会在
stderr
上生成输出错误,因为
find
尝试递归到它没有权限访问的目录中。
print0
用于
find
(和
xargs-0
)的选项用于确保系统在文件名中嵌入空格的情况下工作。

谢谢。是的,我在发帖前确实看过-perm,但它似乎不适合我。而且我似乎没有使用现代系统,我现在使用的是Fedora,而-readable在这里似乎不起作用。它出现在我的Fedora 10系统上。我在大学里有Fedora 7版(Moonshine),我没有管理员权限。当我回家的时候,我有了Ubuntu 8.04,我打赌它也有。:-)实际上没有,它在Ubuntu 8.04中默认不可用。但至少在家里我可以安装它。
-readable
对没有列出权限的目录没有帮助。谢谢。是的,我在发帖前确实看过-perm,但它似乎不适合我。而且我似乎没有使用现代系统,我现在使用的是Fedora,而-readable在这里似乎不起作用。它出现在我的Fedora 10系统上。我在大学里有Fedora 7版(Moonshine),我没有管理员权限。当我回家的时候,我有了Ubuntu 8.04,我打赌它也有。:-)实际上没有,它在Ubuntu 8.04中默认不可用。但至少在家里我可以安装它。
-readable
对没有列出权限的目录没有帮助。