Linux - script bash para encontrar diretórios com condições

0

Eu tenho muitos usuários em /home .
Cada usuário tem uma certa quantidade de diretórios com tamanhos grandes. Eu extraí a lista de usuários criados no sistema em um arquivo de texto sem usuários do sistema (uid abaixo de 1000). Por exemplo, root, ftp e outros usuários do sistema não estão no usernames-list.txt

Existe uma maneira de permitir que find pesquise esta lista usernames-list.txt e acesse seus diretórios /home/ com base nessas 2 condições que podem executar rm -rf ?

condição 1: lista de arquivos / diretórios com data de modificação / acessada com mais de 6 meses.
condição 2: listar arquivos / diretórios que tenham o tamanho de + 50 MB de tamanho.

executar: rm -f

    
por LebLinux 25.01.2018 / 16:55

1 resposta

0

Isso listará todos os diretórios com arquivos com tempo de acesso maior que 180 dias e tamanho maior que 50 MB.

for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u
done

Para remover, adicionei xargs após sort .

No meu próprio / home, eu tenho alguns dirs com espaços e aspas simples no nome (em minha defesa, alguns dirs mp3 :)). xargs imprimiu um aviso e me disse para adicionar a opção -0 , e para corrigir o caractere nulo, adicionei a opção delimitador -d'\n' .

for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u|xargs -0 -d'\n' -n1 -I{} echo -rf "{}"
done

Se as coisas parecem boas para você, então você pode substituir echo por rm no comando xargs .

Talvez rm imprima mensagens de erro porque algum diretório pai será removido antes de algum subdiretório.

    
por 25.01.2018 / 21:40

Tags