localize o número de arquivos que eu posso ler e escrever

0

Como eu contaria o número de arquivos em um determinado diretório que o usuário atual leu permissões e permissões de gravação?

Estou começando com:

echo "whats the directory you want to check ?"
read dir

não tenho certeza se devo usar o comando find ?

    
por johndoe12345 22.09.2015 / 16:31

3 respostas

3

Você precisa perguntar a root para obter a lista de arquivos (para aqueles que estão abaixo dos diretórios que você pode acessar, mas não ler) e verificar os direitos:

sudo find "$dir" -print0|perl -Mfiletest=access -l -0ne'++$n if-r&&-w}{print+$n'

Se você não se importa com arquivos que estão abaixo de diretórios não legíveis (mas você ainda pode ler e escrever), com GNU find :

find "$dir" -writable -readable -printf . | wc -c

Note que ambas as permissões acesso (de todos os tipos de arquivos, incluindo diretórios), não são apenas baseadas em permissões. Ele deve fornecer o número de arquivos que você abriria com sucesso no modo de leitura + gravação (sem criação). Por exemplo, para links simbólicos para os quais as permissões são rwxrwxrwx, ele apenas relata aqueles que apontam para um arquivo no qual você tenha permissão de leitura e gravação.

    
por 22.09.2015 / 16:43
0

Portanto, não sei se isso o ajudará, mas uma alternativa ao uso do find é imprimir todas as informações de todos os arquivos e reduzi-lo a apenas as permissões de usuário. Talvez algo como:

$> cd dir
$> count="$(ls -l | cut -d ' ' -f1 | cut -c 2-4 | grep rw | wc -l | sed 's/ //g')"
    
por 23.09.2015 / 17:26
-1

O utilitário find e sua opção -perm são seus amigos aqui.

$ find <DIR> -type f -perm /u+r,u+w | wc -l

Em um script de shell, você pode obter o valor de determinados argumentos com as variáveis especiais $1 , $2 , ..., $n . Para usar o diretório atual, se nenhum foi dado, você pode seguir este caminho:

DIR=.
if [ "$1" ]
then
    DIR="$1"
fi
find $DIR -type f -perm /u+r,u+w | wc -l
    
por 23.09.2015 / 17:56