"ls -l" 출력의 권한을 8진수로 변환합니다.

"ls -l" 출력의 권한을 8진수로 변환합니다.

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개의 권한만 설정되어 있다고 가정합니다.)

관련 정보