Como calcular o tamanho total do arquivo pesquisado usando o comando Find

5

Primeiro eu tenho que procurar os arquivos usando o comando FIND que mostrará apenas os arquivos para dezembro de 2012

Em segundo lugar, preciso ver o tamanho total dos arquivos pesquisados

Eu usei este comando

find /storage/backup/rman/ -mtime +90 -mtime -120 -exec ls -lrth {} \;

Mas também me deu os arquivos de novembro que eu não quero

-rw-r--r-- 1 oraprod dba 8.7K Dec  1 22:40 /storage/backup/rman/full_011212.log
-rw-r----- 1 oraprod dba 3.3G Dec 11 22:34 /storage/backup/rman/BKPPROD_aknskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec  1 22:40 /storage/backup/rman/ctrl_011223
-rw-r----- 1 oraprod dba 1.3M Dec  1 22:33 /storage/backup/rman/BKPPROD_8lnrq765.F_bkp
-rw-r--r-- 1 oraprod dba 8.0K Dec 20 22:45 /storage/backup/rman/full_201212.log
-rw-r----- 1 oraprod dba 34M Dec  2 22:42 /storage/backup/rman/ctrl_021223
-rw-r----- 1 oraprod dba 2.5G Dec 11 22:38 /storage/backup/rman/BKPPROD_ajnskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec 13 22:46 /storage/backup/rman/ctrl_131223
-rw-r--r-- 1 oraprod dba 8.0K Dec 17 22:44 /storage/backup/rman/full_171212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 10 22:38 /storage/backup/rman/full_101212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 13 22:46 /storage/backup/rman/full_131212.log
-rw-r--r-- 1 oraprod dba 1.4K Nov 30 22:00 /storage/backup/rman/full_301112.log
-rw-r----- 1 oraprod dba 34M Dec  8 22:46 /storage/backup/rman/ctrl_081223
-rw-r--r-- 1 oraprod dba 9.2K Dec 12 22:43 /storage/backup/rman/full_121212.log

quando eu passar o du -ch no final do comando, este é o resultado:

8.0K    ./.gnome/gnome-vfs
12K     ./.gnome
24K     ./lsat-0.9.7.1/changelog
920K    ./lsat-0.9.7.1
8.0K    ./.gconf/desktop/gnome/accessibility/keyboard
12K     ./.gconf/desktop/gnome/accessibility
8.0K    ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod/0
12K     ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod
16K     ./.gconf/desktop/gnome/peripherals/keyboard
20K     ./.gconf/desktop/gnome/peripherals
36K     ./.gconf/desktop/gnome
40K     ./.gconf/desktop
8.0K    ./.gconf/apps/panel/applets/clock/prefs
12K     ./.gconf/apps/panel/applets/clock
8.0K    ./.gconf/apps/panel/applets/workspace_switcher/prefs
12K     ./.gconf/apps/panel/applets/workspace_switcher
8.0K    ./.gconf/apps/panel/applets/window_list/prefs
12K     ./.gconf/apps/panel/applets/window_list
40K     ./.gconf/apps/panel/applets
44K     ./.gconf/apps/panel
8.0K    ./.gconf/apps/puplet
56K     ./.gconf/apps
100K    ./.gconf
8.0K    ./.nautilus/metafiles
12K     ./.nautilus
4.0K    ./.eggcups
196K    ./.gstreamer-0.10
4.0K    ./.redhat/esc
8.0K    ./.redhat
8.0K    ./.gnome2/share/cursor-fonts
8.0K    ./.gnome2/share/fonts
20K     ./.gnome2/share
4.0K    ./.gnome2/keyrings
4.0K    ./.gnome2/accels
4.0K    ./.gnome2/nautilus-scripts
36K     ./.gnome2
12K     ./.metacity/sessions
16K     ./.metacity
4.0K    ./.Trash
4.0K    ./.gnome2_private
68K     ./.gconfd
4.0K    ./.mozilla/extensions
4.0K    ./.mozilla/plugins
12K     ./.mozilla
4.0K    ./Desktop
2.5M    .
2.5M    total
    
por OmiPenguin 24.03.2013 / 07:34

3 respostas

2

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}'
    
por 24.03.2013 / 22:45
2

Primeiro, recupere o tamanho do arquivo em bytes e faça um resumo:

sed 's/\s\+/+/g' <<<$(find /storage/backup/rman/ -mtime +90 -mtime -120 -exec stat -c "%s" {} \;) | bc

EDITAR

Para ver os arquivos também,

du -chs $(find /storage/backup/rman/ -mtime +90 -mtime -120)

    
por 24.03.2013 / 07:56
1

De link

find . -name '*.ear' -exec ls -lh {} \;

apenas o h extra da resposta do jer.drab.org. economiza tempo convertendo para MB mentalmente.

Recursos relacionados

por 24.03.2013 / 11:44

Tags