在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.
答案 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()
(find
,ls
等命令,甚至shell生成文件名列表。
如果您对目录具有读取权限,则可以在目录中找到文件的基本列表,但是您需要“执行”权限才能访问这些文件,甚至可以查找文件权限。
如果您具有没有读取权限的执行权限,但您知道目录中文件的名称,则可以列出该文件并对其进行访问(如果文件权限允许您这样做)。
因此,如果目录不可读但您对目录具有执行权限,则可以调查目录中您知道的所有文件。但是,您无法找到哪些文件。