| Цитата(tzirechnoy @ 28.8.2012, 00:51) | файл octal.awk:
| Код | #!/usr/bin/awk -f BEGIN { FS="[ ]" } function failc( pos, char, file ) { print "Unknown mode char at pos ",pos,":",char," file ",file ; exit 2 } (FNR==1) ; (FNR>1) { split($1,MODE,""); perm=0; if (MODE[2]=="r") {perm+=400} else if (MODE[2]!="-") {failc(2, MODE[2], $0)}; if (MODE[3]=="w") {perm+=200} else if (MODE[3]!="-") {failc(3,MODE[3], $0)}; if (MODE[4]=="x") {perm+=100} else if (MODE[4]=="s") {perm+=4100} else if (MODE[4]=="S") {perm+=4000} else if (MODE[4]!="-") {failc(4,MODE[4],$0)}; if (MODE[5]=="r") {perm+=40} else if (MODE[5]!="-") {failc(5,MODE[5],$0)}; if (MODE[6]=="w") {perm+=20} else if (MODE[6]!="-") {failc(6,MODE[6],$0)}; if (MODE[7]=="x") {perm+=10} else if (MODE[7]=="s") {perm+=2010} else if (MODE[7]=="S") {perm+=2000} else if (MODE[7]!="-") {failc(7,MODE[7],$0)}; if (MODE[8]=="r") {perm+=4} else if (MODE[8]!="-") {failc(8,MODE[8],$0)}; if (MODE[9]=="w") {perm+=2} else if (MODE[9]!="-") {failc(9,MODE[9],$0)}; if (MODE[10]=="x") {perm+=1} else if (MODE[10]=="t") {perm+=1001} else if (MODE[10]=="T") {perm+=1000} else if (MODE[10]!="-") {failc(10,MODE[10],$0)}; if (MODE[11]=="+") { print "Unable to convert POSIX ACL to file mode for",$0; exit 2; } else if (MODE[11]!="") {failc(11,MODE[11],$0)}; $1="0"perm; print; }
|
Использовать в стиле ls -lb |octal.awk Досконально не тэстировал, наверняка есть много неочевидного. |
А на Си это можно написать? |