Algumas versões do find
(Linux não integrado, Cygwin, OSX, FreeBSD) permitem que você compare a hora de modificação de um arquivo com uma data de referência com o operador -newermt
.
find /storage/backup/rman -newermt '2012-12-01' ! -newermt '2013-01-01'
Você não pode usar -mtime
para informar se um arquivo foi modificado em uma data específica, porque esse operador é relativo à hora em que você executa o comando find
. Se o seu find
não tiver o operador -newermt
, crie arquivos de referência e use o operador -newer
.
touch -t 201212010000 start
touch -t 201301010000 end
find /storage/backup/rman -newer start ! -newer end
Para obter o tamanho total dos arquivos, use du -c
e mantenha apenas a última linha (“total”). Você precisará excluir diretórios, porque quando você passa um diretório para du
, ele adiciona os tamanhos de todos os arquivos nesse diretório.
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' -exec du -c {} + | tail -n 1
Se você tiver um grande número de arquivos, o comprimento da linha de comando poderá ser muito grande, portanto, find
executará du
várias vezes e o comando acima listaria apenas a saída do último lote. Nesse caso, você precisará adicionar os valores de cada execução. Aqui está uma maneira de fazer isso.
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
-exec sh -c 'du "$@" | tail -n 1' _ {} + |
awk '{total += $1} END {print total}'
Exercício: o que há de errado com o seguinte comando? (Isto é, em qual situação incomum, mas possível, será relatada uma figura errada?)
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
-exec du {} + |
awk '$2 == "total" {total += $1} END {print total}'