bash 脚本设置父文件夹权限也有问题

Issue with bash script setting parent folder permissions also

我有一个 bash 脚本,它接收 file/folder 的参数、编号的权限、用户和组。

它确定路径变量是文件还是文件夹,并相应地设置权限。

问题是当我传入文件夹时,它将 文件夹本身中的文件设置为新用户和组。

如何只设置循环中的文件 而不是文件夹

#!/bin/bash
path=
ocatal=
user=
group=
GREEN='3[0;32m'
RED='3[0;31m'
if [  -gt 766 ]
then
   tput setaf 1
   echo -e "${RED}777 is not allowed!!! :-("
   tput sgr0
   exit 1   
else
    if [ -f "$path" ] 
    then
        chmod  
        chown ${3:=$(/usr/bin/id -run)}:  
        tput setaf 2
        echo Permission set to 
        echo User set to 
        echo Group set to 
        echo `ls -l `
    else
        for f in $path/*
        do
            chmod  $f
            chown ${3:=$(/usr/bin/id -run)}: $f 
            tput setaf 2
            echo Permission set to 
            echo User set to 
            echo Group set to     
        done
        echo `ls -l `
    fi
   exit 0
fi

The issue is when I pass in a folder, it sets the files within and the folder itself to the new user and group.

发生这种情况是因为这种模式 $path/* 也扩展到 $path/ 并且这导致文件夹权限发生变化。 * 表示任何文件(符号)或什么都没有,因此 $path 也在列表中。

更新,我在这里不太正确,看起来这个问题只有在给定文件夹为空时才会发生,这里是带有空目录的测试回显

$ echo testdir/*
testdir/*

还有文件

$ echo testdir/*
testdir/file testdir/file2

考虑一下

[[  -d "$path" ]] && {
    cd "$path"
    chmod -f $ocatal *
    chown -f $user:$group *
    ...
    cd - # back to previous folder
}

-f 在空文件夹的情况下抑制错误消息

并将此代码 DEF='\e[0m' 添加到您的颜色中以设置默认颜色。

echo -e "${RED}777 is not allowed!!! :-($DEF"