linux中用for循环批量修改文件权限,核心是结合chmod逐个处理匹配文件,适合按扩展名(如.sh、.txt)设权,需加引号防空格错误,并建议先echo预览;它不递归,跨子目录需配合find,且应避免误操作关键系统路径。

Linux 中用 for 循环批量修改文件权限,核心是结合 chmod 命令遍历目标文件,逐个设置权限。它适合处理当前目录下符合特定模式(如 *.log、*.sh)的文件,操作直接、可控,且无需 root 权限(只要对目标文件有写权限)。
基础写法:按扩展名批量设权限
例如,把当前目录所有 shell 脚本加上执行权限:
for script in *.sh; do chmod +x "$script"; done- 如果文件名含空格或特殊字符,必须加双引号(
"$script"),否则命令会出错 -
*.sh是通配符,若当前目录没有匹配文件,bash 默认原样传入*.sh字符串,导致报错;可提前加判断避免:
for script in *.sh; do [ -f "$script" ] && chmod +x "$script"; done
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
按权限数值精确设置
比如统一将所有文本文件设为 644(所有者读写、组和其他人只读):
for file in *.txt; do [ -f "$file" ] && chmod 644 "$file"; done-
644对应rw-r--r--,适合文档、配置等非执行类文件 - 想设为
755(可执行目录或脚本),把644换成755即可
跨子目录处理(非递归,需配合 find)
for 循环本身不递归,但可以和 find 组合实现深度遍历:
- 给当前目录及所有子目录下的
.conf文件设为600(仅所有者可读写): for file in $(find . -name "*.conf" -type f); do chmod 600 "$file"; done- 注意:
$(find ...)若路径含空格,仍可能出错;更健壮写法是用while read,但 for + find 已满足多数日常场景
安全提醒与实用建议
-
先测试,再执行:把
chmod换成echo chmod ...预览将执行哪些命令,确认无误后再删掉echo -
避免误伤系统文件:不要在
/、/etc等关键路径下随意运行,优先在自己的项目目录中操作 -
区分文件与目录:
chmod 755对目录表示“可进入”,对普通文件表示“可执行”——通常不该给日志、文本加执行位 - 需要同时设文件和目录权限(如共享目录),
chmod -R或find -type d / -type f更合适,for 循环更适合单一类型目标










