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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.