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

时间:2012-10-29 23:17:20

标签: linux file bash permissions directory

在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.

2 个答案:

答案 0 :(得分:1)

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

如果您可以阅读~/foo,您可以浏览所有文件和目录并进行测试,无论它们是否可读:

find ~/foo | while read file; do
    if test \! -r "$file"; then
        echo "$file cannot be read"
    fi
done

答案 1 :(得分:1)

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

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

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

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