ls
권한 비트 의 출력을 8진수로 변환하고 싶습니다 .
나는 이 연습을 구현하는 가장 짧고 명확한 방법을 생각했습니다. 입력이 있다고 가정합니다.
total 1
drwxr----x 1 user2 workers 1024 May 26 22:22 dir
-rwx-wxrw- 2 user2 workers 1024 May 26 22:22 file.txt
우리의 결과는 다음과 같아야 합니다:
741 dir
736 file.txt
답변1
GNU를 사용할 수 있습니다 find
.
find . -type f -printf "%m\t%f\n"
파일의 전체 경로를 얻으려면 p
대신 지시문을 사용하십시오 f
.
find . -type f -printf "%m\t%p\n"
결과를 현재 디렉터리로 제한하려면 다음을 지정하십시오 -maxdepth
.
find . -maxdepth 1 -type f -printf "%m\t%f\n"
파일 및 디렉터리에 대한 결과를 원하면 -type
조건자를 제거하세요.
find . -printf "%m\t%p\n"
답변2
당신은 이것을 사용하고 싶지 않습니다 ls
. GNU 시스템에서는 다음을 사용할 수 있습니다.
stat -c'%a %n' *
답변3
이는 가장 명확한 코드는 아니지만 출력을 통해 이해하기 쉽습니다.
echo drwxr----x |
awk '{chars=substr($1,2); print chars; gsub("-","0",chars);
gsub("r","4",chars); gsub("w","2",chars); gsub("x","1",chars);
print chars; for(i=1;i<10;i++) { sum+=substr(chars,i,1);
if (i%3 == 0) { printf "%d",sum;sum=0; }; } print ""; }'
rwxr----x
421400001
741
(여기에서는 처음 9개의 권한만 설정되어 있다고 가정합니다.)