Você pode converter os nomes em um número octal (por exemplo, 744) e usá-lo para alterar as permissões:
#!/bin/bash
# touch ./{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}
for filename in *
do
str="$filename"
str="${str//-/0}"
str="${str//[^0]/1}"
dec="$((2#$str+0))"
oct="$(printf '%03o' "$dec")"
#echo "$str $dec $oct : "
chmod -- "$oct" "$filename"
done
O número octal é obtido por:
- altere cada
-
para zero 0
, cada uma das outras por um 1
.
- converta o número binário em um decimal (porque o shell entende apenas o decimal).
- converta o número decimal em octal.
- use o número octal para alterar as permissões.
O - no comando chmod é porque os nomes de arquivos com vários traços -
são confusos para o comando, ele acredita que o nome do arquivo é uma opção.