Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 递归检查所有文件的所有权_Linux_Bash - Fatal编程技术网

Linux 递归检查所有文件的所有权

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 最终目标是解决权限问题。但是,我无法使/*变量位于/中所有内容的下方,它只会检查/下的文件,并在任

这是我第一次尝试bash脚本。我正在尝试创建一个脚本来检查从某个目录下开始的每个文件所有者和组

例如,如果我有:

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