Pagina 1 di 1

[RISOLTO] Bash:stimare dimensione di una directory compressa

Inviato: lun 20 giu 2011, 17:39
da tom
Esiste un modo per determinare in bash a priori le dimensioni che una directory assumerà una volta compressa in tar.xz (oppure in altre forme di compressione) PRIMA che il file compresso sia creato?

Mi spiego meglio: sto scrivendo uno script in bash per il backup. Ipotizziamo di trovarci ad un certo punto nella directory pippo che dovrà essere compressa dallo script in pippo.tar.xz, le dimensioni (in megabyte 1024x1024) della directory pippo le posso visualizzare facilmente così:

Codice: Seleziona tutto

du -sm .                     # assumendo di trovarci all'interno di pippo
ma supponiamo ora che io voglia stimare le dimensioni (sempre in megabyte 1024x1024) del futuro (non ancora creato) file compresso pippo.tar.xz... esiste un modo?

Re: Bash: stimare dimensione di una directory compressa

Inviato: lun 20 giu 2011, 20:52
da Mario Vanoni
Impossibile!
Se la directory contiene solo "flat files",
puoi valutate la compressione secondo il manuale del compressore.
Se la directory contiene files mescolati con *.jpg, *.wav ecc. dimenticalo.
Ho fatto un test con un file *.jpg
4'846'050 bytes, compresso con bzip2(1)
4'798'402 bytes, non prevedibile.

Re: Bash: stimare dimensione di una directory compressa

Inviato: lun 20 giu 2011, 21:03
da tom
E invece ci sono riuscito! Per chi in futuro abbia questo dubbio la soluzione è:

Codice: Seleziona tutto

tar cvJf - pippo | wc -c                         # in byte 
echo $(( $(tar cvJf - pippo | wc -c)/10**3 ))    # in kilobyte (1 Kb = 1.000 byte)
echo $(( $(tar cvJf - pippo | wc -c)/10**6 ))    # in megabyte (1 Mb = 1.000.000 byte)
echo $(( $(tar cvJf - pippo | wc -c)/1024 ))     # in kilobyte (1 Kb = 1.024 byte)
echo $(( $(tar cvJf - pippo | wc -c)/1024**2 ))  # in megabyte (1 Mb = 1.048.576 byte)
Metto il tag [RISOLTO].

Re: [RISOLTO] Bash:stimare dimensione di una directory compr

Inviato: mar 21 giu 2011, 0:12
da targzeta
Alcune note:
  • il comando tar con l'opzione 'c' manda già l'output sullo stdout, quindi l'opzione 'f -' non serve.
  • anche l'opzione 'v' potresti evitarla, anche se poi, alla fine, dipende da cosa ci vuoi fare.
  • Così tu hai "compresso" i dati. Non è proprio quello che avevi chiesto e a cui, credo, Mario ti ha risposto. Infatti, senza processare i dati, è difficile fare ciò che chiedi.
Emanuele

Re: [RISOLTO] Bash:stimare dimensione di una directory compr

Inviato: mar 21 giu 2011, 0:26
da Toni
spina ha scritto:Alcune note:
  • il comando tar con l'opzione 'c' manda già l'output sullo stdout, quindi l'opzione 'f -' non serve.
  • anche l'opzione 'v' potresti evitarla, anche se poi, alla fine, dipende da cosa ci vuoi fare.
  • Così tu hai "compresso" i dati. Non è proprio quello che avevi chiesto e a cui, credo, Mario ti ha risposto. Infatti, senza processare i dati, è difficile fare ciò che chiedi.
Emanuele
Per stabilire il livello di compressione ottenibile bisogna conoscere la "natura" della sequenza dati , più essa è casuale minore è la compressione ottenibile. Al limite è nulla.

Uno strumento utile per valutare l'entropia è ent
http://www.fourmilab.ch/random/