如何编写Shell脚本创建符合权限命名规范的全权限组合空文件
自动生成对应权限的符号命名文件脚本
要批量生成所有权限组合的空文件,且文件名对应权限的符号格式(将-替换为_),可以通过遍历所有八进制权限、转换符号格式、创建文件三步实现,以下是两种可靠的方案:
方案1:用临时文件提取权限(直观易理解)
这种方法借助系统工具提取权限字符串,适合新手快速理解:
#!/bin/bash # 定义目标目录,不存在则自动创建 TARGET_DIR="task5" mkdir -p "$TARGET_DIR" # 遍历所有三位八进制权限(000到777,共512种组合) for perm in {000..777}; do # 创建临时文件用于获取权限符号 temp_file=$(mktemp) chmod "$perm" "$temp_file" # 提取权限字符串:去掉开头的文件类型标识(如'-'),将'-'替换为'_' perm_str=$(stat -c "%A" "$temp_file" | cut -c2- | tr '-' '_') rm -f "$temp_file" # 清理临时文件 # 生成目标文件名 filename="${TARGET_DIR}/${perm_str}.txt" # 直接创建空文件并设置权限(比touch+chmod更高效) install -m "$perm" /dev/null "$filename" # 可选:输出创建日志,方便跟踪进度 echo "Created: $filename (octal: $perm)" done
关键步骤说明:
mkdir -p "$TARGET_DIR":确保目标目录存在,避免因目录缺失报错{000..777}:Bash 4+的大括号扩展,自动生成带前导零的三位八进制数(覆盖所有权限组合);旧版Bash可替换为seq -w 0 777stat -c "%A":获取文件的人类可读权限字符串(如-rwxrwxrwx)cut -c2-:去掉开头的文件类型字符(普通文件为-),得到9位权限核心字符串tr '-' '_':将权限中的无权限标识-替换为下划线_,匹配你需要的文件名格式install -m "$perm" /dev/null "$filename":一步完成空文件创建与权限设置,比先touch再chmod更高效
方案2:位运算直接生成权限字符串(高效无临时文件)
如果追求更高效率,可通过位运算直接计算权限符号,无需创建临时文件:
#!/bin/bash TARGET_DIR="task5" mkdir -p "$TARGET_DIR" # 将八进制权限转换为符号格式字符串(替换'-'为'_') perm_to_str() { local octal=$1 local str="" # 依次处理所有者、组、其他三个权限组 for i in 0 1 2; do # 提取当前组的八进制位(如777的第一个7对应所有者权限) local group=$(( (octal >> (6 - 3*i)) & 7 )) # 判断并拼接读、写、执行权限符号 str+=$(( group & 4 ? 'r' : '_' )) # 读权限对应八进制4 str+=$(( group & 2 ? 'w' : '_' )) # 写权限对应八进制2 str+=$(( group & 1 ? 'x' : '_' )) # 执行权限对应八进制1 done echo "$str" } # 遍历所有权限组合 for perm in {000..777}; do perm_str=$(perm_to_str "$perm") filename="${TARGET_DIR}/${perm_str}.txt" install -m "$perm" /dev/null "$filename" echo "Created: $filename (octal: $perm)" done
核心逻辑:
通过位运算拆解八进制权限的每一位:
- 每个八进制数(如7)对应二进制
111,分别代表读(4=100)、写(2=010)、执行(1=001)权限 - 依次判断每个权限位是否存在,拼接成对应的符号字符串
使用说明
- 保存脚本为
generate_perm_files.sh - 赋予执行权限:
chmod +x generate_perm_files.sh - 运行脚本:
./generate_perm_files.sh
脚本会在task5目录下生成512个空文件,每个文件名对应其权限的符号格式(如rwxr_xr_x.txt对应权限755)。
内容的提问来源于stack exchange,提问作者It's me
相关产品推荐
相关产品推荐

