0

在 bash 中,如何输出目录的不可读内容?

例如,假设目录是~/foo,并且有一个不可读的文件夹~/foo/folder,其中包含一个文件~/foo/folder/file1.txt,以及另一个不可读的文件~/foo/file2.txt。我想输出:

~/foo/folder cannot be read.
~/foo/folder/file1.txt cannot be read.
~/foo/file2.txt cannot be read.
4

2 回答 2

1

目录权限很有趣。如果您没有目录的读取权限,则无法通过系统调用(例如 ,等readdir()命令,甚至 shell 生成文件名列表的方式)找出其中包含哪些文件。findls

如果您对某个目录具有读取权限,则可以在该目录中找到文件的基本列表,但您需要“执行”权限才能访问这些文件,甚至可以找出文件权限。

如果您有执行权限但没有读取权限,但您知道目录中文件的名称,您可以列出该文件并访问它(如果文件权限允许您这样做)。

因此,如果该目录不可读但您对该目录具有执行权限,则可以调查该目录中您知道的任何文件。但是,您无法找出那里有哪些文件。

于 2012-10-29T23:42:44.917 回答
1

如果您无法读取文件夹~/foo/folder,则您无法检测其中的任何文件,无论它们是否可读。

如果您可以阅读~/foo,则可以检查所有文件和目录并测试它们是否可读:

find ~/foo | while read file; do
    if test \! -r "$file"; then
        echo "$file cannot be read"
    fi
done
于 2012-10-29T23:29:30.613 回答