You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本权限设置问题:仅修改文件夹内文件而非文件夹本身

我来帮你调整这个Bash脚本,解决你遇到的问题——让它只修改目标文件夹内的文件(完全不触碰文件夹本身的权限和属主)。先梳理下原脚本的小问题:它在处理文件夹时,虽然没直接修改顶层文件夹,但存在路径空格兼容问题、空文件夹处理不当的情况,而且如果不需要修改子文件夹的话,也没做针对性过滤。

下面是修改后的脚本,我会在后面逐一解释关键改动:

#!/bin/bash
path="$1"
octal="$2"
user="${3:-$(/usr/bin/id -run)}"
group="$4"
GREEN='\033[0;32m'
RED='\033[0;31m'

# 校验权限参数,禁止777及以上风险权限
if [[ "$octal" -gt 766 ]]; then
    tput setaf 1
    echo -e "${RED}777 is not allowed!!! :-("
    tput sgr0
    exit 1
fi

if [[ -f "$path" ]]; then
    # 处理单个文件的逻辑,优化了引号包裹避免路径问题
    chmod "$octal" "$path"
    chown "$user:$group" "$path"
    tput setaf 2
    echo "Permission set to $octal"
    echo "User set to $user"
    echo "Group set to $group"
    ls -l "$path"
elif [[ -d "$path" ]]; then
    # 处理文件夹:只修改内部文件,不碰顶层文件夹
    for f in "$path"/*; do
        # 空文件夹时,$path/*会变成字面字符串,直接跳过这种无效情况
        [[ -e "$f" ]] || continue
        
        # 只处理文件,如果你需要连子文件夹一起改,删掉下面这个if判断即可
        if [[ -f "$f" ]]; then
            chmod "$octal" "$f"
            chown "$user:$group" "$f"
            tput setaf 2
            echo "Updated file: $f"
            echo "  Permission: $octal"
            echo "  Owner: $user:$group"
        fi
    done
    # 显示顶层文件夹的信息,但明确标注未修改
    echo -e "\nTop-level folder (unchanged):"
    ls -ld "$path"
else
    # 处理无效路径的情况,给出明确提示
    tput setaf 1
    echo -e "${RED}Error: '$path' is not a valid file or directory!"
    tput sgr0
    exit 1
fi

exit 0

关键改动说明:

  • 全路径加引号:所有涉及路径的变量都用双引号包裹,彻底解决路径含空格、特殊字符时的命令崩溃问题
  • 默认值写法优化:用${3:-...}代替原脚本的${3:=...},不会修改原始位置参数,逻辑更安全稳定
  • 空文件夹处理:增加[[ -e "$f" ]] || continue判断,避免空文件夹时对$path/*这个无效字符串执行命令
  • 文件过滤逻辑:新增-f "$f"判断,确保只修改文件夹内的文件;如果需要修改文件夹内的所有内容(包括子文件夹),直接删掉这个if判断就行
  • 错误提示补充:新增了无效路径的判断,给用户清晰的错误反馈,避免无意义的脚本执行
  • 输出更友好:调整了输出内容格式,让每个文件的修改信息更清晰,同时明确标注顶层文件夹未被修改

这样调整后,脚本就只会修改目标文件夹内的文件,完全不会改动文件夹本身的权限和属主啦。

内容的提问来源于stack exchange,提问作者user2702643

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:53:09