encontrar arquivos com permissão maior que xxx

6

Eu quero encontrar todos os arquivos que têm uma permissão maior do que, por exemplo. 640. Talvez isso funcione com um comando find e exec. Mas meu conhecimento não é suficiente para tal tarefa.

    
por testing 15.02.2012 / 17:46

3 respostas

6

Eu acho que você está atrás é

find -perm -640 ! -perm 640

, ou seja, arquivos de pesquisa que tenham pelo menos todas as permissões em 640 e que não tenham 640 como bits de permissão. Ou, em outras palavras, entre os arquivos que podem ser lidos e gravados pelo seu proprietário e legíveis pelo grupo, arquivos de pesquisa que são executáveis ou graváveis por alguém que não seja o proprietário ou legíveis pelo mundo (assumindo que não há ACLs). Você pode querer adicionar -type f para restringir a arquivos regulares, ou pelo menos ! -type d -o -type d -perm 750 ! -perm 750 para permitir que os diretórios tenham permissão de execução.

Se você quiser combinar arquivos cujos bits de permissão, interpretados como um inteiro, são maiores que 0o640 (o que não faz muito sentido), você terá que enumerar vários casos. Se você observar a representação bit a bit, há duas maneiras de um número entre 0 e 0o777 ser maior que 0o640: ou o 0o100 bit é definido além dos 0o600 bits, ou os 0o640 bits são definidos. Remova o ! -perm 640 final se você quiser que as permissões 0o640 correspondam.

find -perm -700 -o -perm -640 ! -perm 640
    
por 16.02.2012 / 08:51
1

Aqui está um ótimo comando que você pode editar para seu próprio uso:

find -perm -o+r -exec stat --printf='%A %a %n --- %F\n' {} \;

Exemplo de resultado:

-rw-r--r-- 644 dir1//file4 --- regular file
lrwxrwxrwx 777 dir1/file5 --- symbolic link

Localiza arquivos com permissão para outros lerem. Em seguida, imprima as permissões no formato simbólico e octal, no caminho do arquivo e no tipo de arquivo.

    
por 19.09.2014 / 12:00
0

Aqui está um verso que você pode usar:

find . -type f -printf %p:%m\n | while read x; do name=${x%:*}; perm=${x#*:}; if [[ $perm -gt 640 ]]; then echo $name; fi done

Este comando localiza todos os arquivos regulares do seu caminho atual e imprime seu nome ( %p ) e suas permissões ( %m ) separadas por dois pontos. Cada linha de saída é lida em uma variável $x , que é então dividida em variáveis $name e $perm :

${x%:*} means retorna o valor de x, com seu sufixo removido

${x#:*} means retorna o valor de x, com seu prefixo removido

Se as permissões do arquivo corresponderem aos critérios, imprima o nome do arquivo.

PS: Para uso simples, você pode atribuir o comando a um alias:

alias advfind='find ...'
    
por 15.02.2012 / 23:45