Linux 递归检查所有文件的所有权
这是我第一次尝试bash脚本。我正在尝试创建一个脚本来检查从某个目录下开始的每个文件所有者和组 例如,如果我有:Linux 递归检查所有文件的所有权,linux,bash,Linux,Bash,这是我第一次尝试bash脚本。我正在尝试创建一个脚本来检查从某个目录下开始的每个文件所有者和组 例如,如果我有: files=/* for f in $files; do owner=$(stat -c %U $f) if [ "$owner" != "someone" ]; then echo $f $owner fi done 最终目标是解决权限问题。但是,我无法使/*变量位于/中所有内容的下方,它只会检查/下的文件,并在任
files=/*
for f in $files; do
owner=$(stat -c %U $f)
if [ "$owner" != "someone" ]; then
echo $f $owner
fi
done
最终目标是解决权限问题。但是,我无法使
/*
变量位于/
中所有内容的下方,它只会检查/
下的文件,并在任何新目录下停止。关于如何检查/
及其任何子目录下的所有内容的权限的任何指针?您可以shopt-s globstar
并在您的目录中使用for f/**
在bash4+中递归展开,或者您可以使用find
:
find yourdir ! -user someone
如果希望用户名和文件名具有相同的输出格式,则必须获得特定于系统的:
GNU$ find yourdir ! -user someone -printf '%p %u\n'
OSX$ find yourdir ! -user someone -exec stat -f '%N %Su' {} +
你可以试试这个,它是递归的:
function playFiles {
files=$1
for f in $files; do
if [ ! -d $f ]; then
owner=$(stat -c %U $f)
echo "Simple FILE=$f -- OWNER=$owner"
if [ "$owner" != "root" ]; then
echo $f $owner
fi
else
playFiles "$f/*"
fi
done
}
playFiles "/root/*"
在将playFiles“/root/”替换为:playFiles/”之前,在另一个目录中播放一点。顺便说一句,playFiles是一个bash函数。希望这能对你有所帮助 以列表格式递归列出所有文件和显示所有权和权限的隐藏文件
ls -Rla *
你好这个函数可以递归运行吗?谢谢大家,我更喜欢这个函数,而且它运行得很好。对于unix用户,请将所有者行更改为
owner=$(stat-f%Su$f)
快速问题,为什么这个脚本会打印出$f/*值?这实际上是最好的答案。对于osx用户,brew安装findutils
并毫不费力地使用gfind
。