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

0

Eu tenho muitos usuários abaixo /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 nos nomes de usuário-list.txt

Existe uma maneira que podemos permitir findpesquisar esta lista usernames-list.txt e acessar seus /home/diretórios com base nessas 2 condições podem ser executadas rm -rf?

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

executar: rm -f

LebLinux
fonte
Veja man find, há muitos testes que você pode fazer com arquivos. for name in $(cat usernames-list.txt);do find /home/"$name" -type f -atime +180 -size +50M -exec echo -f "{}" \;;doneSe você está confortável com os resultados substitua echocomrm
Paulo
Obrigado! então $ name será buscado por cada nome na lista, certo?
LebLinux
Sim, o loop será executado findpara cada linha no usernames.txt. Eu editei o meu comentário, eu escrevi, -rfmas desde encontrar vai procurar apenas por arquivos, não há necessidade de opção recursiva.
Paulo
I nees para diretórios também, devo adicionar -f -d?
LebLinux
Não sei se findposso fazer esses testes com diretórios. O que você quer é deletar apenas os diretórios que possuem tais arquivos ou deletar todo o /home/userdiretório?
Paulo

Respostas:

0

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

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

Para remover, eu adicionei xargsdepois sort.

No meu próprio / home, eu tenho alguns dirs com espaços e aspas simples no nome (em minha defesa, alguns dirs mp3 :)). xargsimpresso um aviso sobre e me disse para adicionar -0opção, e para corrigir o caractere nulo eu adicionei 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 ok para você, então você pode substituir echocom rmo xargscomando.

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

Paulo
fonte
Seja bem-vindo. Tenha cuidado com isso rm -rf, talvez o /home/userpróprio possa aparecer na lista !! E lembre-se dos limites de cota :)
Paulo
Claro, mas enquanto o seu acesso dentro / home / $ user eu não acho que vai rm-rf / home / usuário em si, mas vai dar uma chance em testar sistemas :) mais uma vez obrigado pela ajuda e tempo Paulo :)
LebLinux