Que comando usar para encontrar todos os arquivos / pastas com permissões não padrão?

4

Suponha que eu tenha uma pasta, contendo outros arquivos e pastas, e gostaria de descobrir recursivamente quais subpastas e subpastas têm permissões não padrão (ou seja, não 644 ou 755).

Qual comando pode ser usado para fazer isso? O comando deve mostrar uma lista dos arquivos e pastas relevantes e suas permissões.

    
por Jonathan 08.02.2014 / 15:23

3 respostas

9

Você pode fazer a tarefa inteira usando apenas find :

$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n"

Exemplo

Faça todas as permutações de permissões (000-777).

$ touch {0..7}{0..7}{0..7}
$ for i in {0..7}{0..7}{0..7}; do chmod $i $i;done
$ find . -type f | wc -l
512

Uma amostra da lista de arquivos do nosso comando find está sendo encontrada:

$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n"| head -10
734 ./734
376 ./376
555 ./555
663 ./663
256 ./256
336 ./336
2   ./002
152 ./152
527 ./527
416 ./416

Se executarmos o comando find , poderemos confirmar que funcionou:

$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n" | grep 755
$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n" | grep 644
    
por 08.02.2014 / 15:31
3
find . \( \
  -type d ! -perm 755 -o \
  -type l ! -perm 777 -o \
  -type f ! \( -perm 644 -o -perm 755 \) -o \
  ! -type f ! -type l ! -type d ! -perm 644 \) -exec ls -ld {} +
    
por 08.02.2014 / 15:55
2
find . -printf "%m\t%p\n" | grep -Ev "^(755|644)"

Exemplo de saída:

$ find . -printf "%m\t%p\n" | grep -Ev "^(755|644)"
777 ./a/writable/folder
777 ./another/folder
666 ./an/executable-file

Por favor, note que o comando egrep não considera se uma linha é um arquivo ou uma pasta. Como resultado, arquivos com permissão 755 e pastas com permissão 644 não seriam encontrados por este comando.

Além disso, esse comando não é muito eficiente, pois find começa imprimindo todas as subpastas e subarquivos, e somente depois disso os arquivos e pastas são filtrados por egrep . No entanto, ainda não encontrei um método melhor.

    
por 08.02.2014 / 15:23