Liste os diretórios criados nos últimos 3 dias e exiba o uso do espaço

Liste os diretórios criados nos últimos 3 dias e exiba o uso do espaço

Como parte da limpeza do disco, agora sou obrigado a excluir todas as pastas e seu conteúdo criado nos últimos 3 dias (não na data comercial atual):

Exemplo - a data de hoje é 20191121, então:

/opt/png/wsm/data/workdir/batch/*20191120*
/opt/png/wsm/data/workdir/batch/*20191119*
/opt/png/wsm/data/workdir/batch/*20191118*

Tudo o que posso fazer agora é pegar a lista:

ls -d */ | grep 20191118 (and then 19 and 20)

Como posso verificar quanto tamanho posso economizar excluindo uma(s) pasta(s) datada(s) específica(s) e seu conteúdo?

A versão bash no servidor é:

bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (i386-pc-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.

Responder1

Ao limpar arquivos e pastas, você pode usar o ducomando.

dulista o uso de espaço em disco,tem uma --timeopção, e pode ser usadoapenas para diretórios. Combinando-os:

du -h */ --time | grep -E '2019\-09\-(18|19|20)'

Isso irá capturar qualquer subdiretório cujo conteúdo foi criado ou modificado pela última vez em 18, 19 ou 20 de novembro. Ele exibirá o tamanho ( -hlegível por humanos), a data de modificação e, finalmente, o caminho.

Responder2

A resposta anterior falhará se os diretórios que você tentar rm contiverem mais de 5.000 arquivos. Isso deixará você com diretórios antigos não excluídos.

Em vez disso, use find com "-exec rm {} \+" que chamará rm uma ou mais vezes com um máximo de 5.000 argumentos para cada chamada.

Para encontrar arquivos/diretórios modificados, use find

find . -type d -atime n  # for exact number of days
find . -type d -atime +n  # for greater than n days

Você pode adicionar a opção -daystart para medir os tempos desde o início de hoje, em vez de 24 horas atrás

Em seguida, use "-exec rm {} \+" para remover ou "-exec du -sh {} \;" para obter o uso do disco de cada diretório.

Considere também a opção -maxprofundidade para chamadas find + du para limitar a localização aos diretórios de nível superior.

Consulte "man find" para obter mais informações (no terminal (melhor) ou em man7.org para obter uma página de manual atualizada:http://man7.org/linux/man-pages/man1/find.1.html, mas não do Die.net (eles até removem os carimbos de data e hora da página para que você não conheça suas páginas de manual ou anos de idade e desatualizados)).

Responder3

Em seguida, uma sintaxe muito mais curta e (do meu ponto de vista) mais legível para a solução @Kusalananda, e usando date em vez de gdate (embora talvez gdate seja uma data equivalente no solaris?):

days=$(echo -e "1 day ago \n 2 days ago \n 3 days ago" | date -f - +'%Y%m%d')
dpath="/opt/png/wsm/data/workdir/batch"
for day in $days ; do
    du -s -h "$dpath/$day"
    rm -r -f "$dpath/$day"
done

Responder4

Se o seu sistema Solaris tiver bash, normalmente também terá zsh.

Como esse formato de data é classificado como números, você pode usar <start-end>o operador glob de intervalo de números decimais do zsh:

zsh -c '
  zmodload zsh/datetime
  now=$EPOCHSECONDS day=$(( 24 * 60 * 60 ))
  for var t (start $(( now - 3*day )) end $(( now - 1*day )) )
    strftime -s $var %Y%m%d $t
  range="<$start-$end>"
  rm -rf -- *$~range*(/)
'

Tenha em atenção que se for executado no dia errado do ano, a meio da noite, ao mudar de/para o horário de verão, subtrair 24*60*60 segundos da hora atual poderá levá-lo ao mesmo dia ou a 2 dias atrás.

Para obter o cuso umulativo do disco desses diretórios, substitua rm -rfpor du -c. Se essa é a quantidade de espaço que será recuperada após removê-los, depende se algum arquivo nesses diretórios possui links físicos em outro lugar ou não.

informação relacionada