如何计算当前用户具有读取权限和写入权限的给定目录中的文件数量?
我从以下开始:
echo "whats the directory you want to check ?"
read dir
不确定我应该使用find
命令吗?
答案1
您需要要求root
获取文件列表(对于您可以访问但无法读取的目录下的文件),然后检查权限:
sudo find "$dir" -print0|perl -Mfiletest=access -l -0ne'++$n if-r&&-w}{print+$n'
如果您不关心不可读目录下的文件(但您仍然可以读写),请使用 GNU find
:
find "$dir" -writable -readable -printf . | wc -c
请注意,两者都检查使用权权限(包括目录在内的每种类型的文件),它不仅仅基于权限。它应该为您提供在读+写模式下成功打开的文件数(无需创建)。例如,对于权限为 rwxrwxrwx 的符号链接,它仅报告那些指向您具有读写权限的文件的符号链接。
答案2
所以,我不知道这是否会对您有所帮助,但是使用 find 的另一种方法是打印所有文件中的所有信息,并将其缩减为仅用户权限,然后进行计数。也许是这样的:
$> cd dir
$> count="$(ls -l | cut -d ' ' -f1 | cut -c 2-4 | grep rw | wc -l | sed 's/ //g')"
答案3
该find
实用程序及其-perm
选项是您的朋友。
$ find <DIR> -type f -perm /u+r,u+w | wc -l
$1
在 shell 脚本中,您可以使用特殊变量, $2
, ...,获取给定参数的值$n
。如果没有给出,要使用当前目录,可以这样:
DIR=.
if [ "$1" ]
then
DIR="$1"
fi
find $DIR -type f -perm /u+r,u+w | wc -l