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

如何在Bash中直接捕获文件权限并通过chmod重新应用?

解决sed -i修改文件后丢失执行权限的问题

直接用stat命令就能获取文件权限的原生格式,不用折腾ls -l的输出,步骤很简单:

通用GNU/Linux方案

  1. 先存好目标文件的权限:
PERM=$(stat -c "%a" your_script.sh)

%a参数会直接返回八进制权限值(比如755、700),刚好是chmod能直接用的格式。

  1. 执行你的sed修改:
sed -i 's/old_content/new_content/g' your_script.sh
  1. 把权限改回去:
chmod $PERM your_script.sh

嫌麻烦可以合并成一行:

PERM=$(stat -c "%a" your_script.sh); sed -i 's/old_content/new_content/g' your_script.sh; chmod $PERM your_script.sh

适配BSD/macOS的情况

BSD系的stat参数不一样,要这么取权限:

# 截取八进制权限的后三位(因为BSD stat返回的完整模式包含文件类型位)
PERM=$(stat -f "%p" your_script.sh | cut -c 4-6)
sed -i '' 's/old_content/new_content/g' your_script.sh  # macOS的sed -i需要加空参数
chmod $PERM your_script.sh

另一种直观方式:用符号权限

不想记数值的话,也可以直接存符号格式的权限(比如rwxr-xr-x):

# GNU/Linux
PERM=$(stat -c "%A" your_script.sh)
chmod "$PERM" your_script.sh

# BSD/macOS
PERM=$(stat -f "%Lp" your_script.sh)
chmod "$PERM" your_script.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:02