使用ls和cut命令获取文件所有者名称

时间:2018-11-29 10:58:44

标签: bash shell

我目前正在尝试创建一个函数,该函数可使用以下函数来检索文件所有者名称:

OWNER_IDX=3
fileowner=""

#Gives file owner name. Takes the file name as an argument
function getfileowner()
{
    fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`
    echo $fileowner
}

为了验证我的功能到底能做什么,我创建了一个测试功能:

function testgetfileowner()
{
    for file in `ls`
    do 
        getfileowner $file
        echo "$file belongs to $fileowner"
    done
}

但是当我执行脚本时,会得到以下输出:

exemple_gz.gz belongs to 
exemple_tar.tar belongs to 
exemple_tgz.tgz belongs to 
exercice_10.sh belongs to 
exercice_8.sh belongs to 
INFOH304 belongs to 
lipap.sh belongs to 

我测试线路

fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`

在终端上如下:

ls -l  | grep exemple_gz.gz | cut -f 3 -d " "

,效果很好。我做错了什么?提前致谢。

2 个答案:

答案 0 :(得分:2)

$fileowner从未在测试中设置为任何值,您应该在getfileowner中返回该值。

此外,正如我在评论中所说,您可以直接使用stat -c %U filename来获取用户名。

您的函数还有另一个问题:ls -l | grep $1可以匹配多个文件并且是多余的,而ls -dl $1可以直接执行您想要的操作,-d可以列出目录本身,而不是列出目录其内容。

答案 1 :(得分:0)

this所示,另一种解决方案是在stdout上打印而不是返回值并用命令替换捕获它。

#Gives owner name. Takes the file name as an argument
function getfileowner()
{
    echo "`ls -ld $1 | cut -f $OWNER_IDX -d " "`"
}
function testgetfileowner()
{
    for file in *
    do 
        echo "$file belongs to $(getfileowner $file)"
    done
}