根据名称更改文件权限

use*_*129 3 shell scripting bash chmod shell-script

我创建了 512 个文件,名称由权限组合 ( r, w, x) 组成。

我这样创建它们:

touch ./{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}
Run Code Online (Sandbox Code Playgroud)

并且我希望文件具有与其名称指示相同的r-x--xrwx权限,例如,文件应该具有权限r-x--xrwx

我试着这样做:

for i in *
do
    u=${i:0:3};g=${i:3:3};o=${i:6:3}
    chmod u=$u,g=$g,o=$o -- $i
done
Run Code Online (Sandbox Code Playgroud)

某些文件最终具有正确的权限,但对于其他文件,权限与名称不匹配。我怎样才能解决这个问题?

Ste*_*itt 5

您传递给的参数chmod包括-符号但不应该。要解决这个问题,请删除-符号:

for i in *
do
  u=${i:0:3};g=${i:3:3};o=${i:6:3};
  u=${u//-/};g=${g//-/};o=${o//-/};
  chmod -- "u=$u,g=$g,o=$o" "$i"
done
Run Code Online (Sandbox Code Playgroud)