Converta as permissões na saída 'ls -l' para octal [duplicate]

5

Eu quero converter a saída de ls em bits de permissão octal.

Eu penso no caminho mais curto e mais claro para implementar esse exercício: digamos que temos como entrada:

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

nossa saída deve ser:

741 dir
736 file.txt
    
por user3527406 23.04.2014 / 02:01

3 respostas

8

Você pode usar o GNU find :

find . -type f -printf "%m\t%f\n"

Para obter o caminho completo do arquivo, use a diretiva p em vez de f :

find . -type f -printf "%m\t%p\n"

Para restringir os resultados ao diretório atual, especifique -maxdepth :

find . -maxdepth 1 -type f -printf "%m\t%f\n"

Se você quiser resultados em arquivos e diretórios, remova o predicado -type :

find . -printf "%m\t%p\n"
    
por 23.04.2014 / 02:06
7

Você não quer usar ls para isso. Em um sistema GNU, você poderia usar:

stat -c'%a %n' *
    
por 23.04.2014 / 02:04
1

Esse pode não ser o código mais claro, mas a saída é muito fácil de entender:

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

(assumindo que apenas os primeiros 9 bits das permissões estejam definidos)

    
por 23.04.2014 / 02:21