Como gerar listas de propriedade de pastas para cada usuário?

2

Gostaria de gerar várias listas separadas para cada usuário no Ubuntu. As listas contêm os arquivos e pastas que pertencem a cada usuário.

Usando o comando a seguir, liste todos os usuários no sistema:

cat /etc/passwd | awk -F: '{print $1;}'

Suponha que "user1" seja o primeiro resultado. Gostaria de obter a lista como:

find / -user "user1" > user1.txt

Assim, meu problema é como obter todas as listas usando comandos o mínimo possível. Agradecemos antecipadamente.

    
por Allen Koo 13.08.2012 / 11:05

2 respostas

3
getent passwd | cut -d: -f1 | while read USER ; do
  echo $USER #use this to show some kind of progress otherwise delete this string
  find / -user $USER > ${USER}.txt 2>/dev/null
done

ps. Para mais informações, consulte loop de shell .

No entanto, é uma má ideia: você precisará executar find em todo o sistema de arquivos quantas vezes forem os usuários que você possui.

Seremos muito mais inteligentes e faremos isso de outra maneira: executaremos find apenas uma vez e dividiremos sua saída em um arquivo como este:

find / -printf "%u %p\n" | awk '{print $2 > $1".txt"}'
    
por 13.08.2012 / 11:53
1

Pelo menos o GNU find tem a variante -fprint , com a qual você pode realizar o que quiser com uma única passagem do sistema de arquivos usando o idioma: find path -user user1 -fprint user1.txt .

Primeiro, gere os argumentos -user e -fprint :

findargs=""
for user in $(cut -d: -f1 /etc/passwd); do
  if [[ -z $findargs ]]; then
    findargs="-user $user -fprint $user.txt";
  else 
    findargs="$findargs -or -user $user -fprint $user.txt"
  fi
done

Agora você está pronto para analisar o sistema de arquivos:

find path/to/parse $findargs
    
por 13.08.2012 / 13:50