GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere la dimensione effettiva della directory (da du)?

Alcune versioni di du supporta l'argomento --apparent-size per mostrare la dimensione apparente invece dell'utilizzo del disco. Quindi il tuo comando sarebbe:

du -hs --apparent-size

Dalle pagine man per du incluse in Ubuntu 12.04 LTS:

--apparent-size
      print apparent sizes,  rather  than  disk  usage;  although  the
      apparent  size is usually smaller, it may be larger due to holes
      in (`sparse') files, internal  fragmentation,  indirect  blocks,
      and the like

Ecco uno script che mostra una dimensione di directory leggibile dall'uomo utilizzando gli strumenti standard Unix (POSIX).

#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
  u="+Ki+Mi+Gi+Ti+Pi+Ei";
  split(u,unit,"+");
  v=sum;
  for(i=1;i<7;i++) {
    if(v<1024) break;
    v/=1024;
  }
  printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'

es:

$ ds ~        
72.891 GiB

Supponendo che tu abbia du da GNU coreutils, questo comando dovrebbe calcolare la dimensione apparente totale di un numero arbitrario di file regolari all'interno di una directory senza limiti arbitrari sul numero di file:

find . -type f -print0 | du -scb --files0-from=- | tail -n 1

Aggiungi il -l opzione a du se ci sono alcuni file hardlink all'interno e vuoi contare ogni hardlink separatamente (per impostazione predefinita du conta più hardlink una sola volta).

La differenza più importante con il semplice du -sb è quel du ricorsivo conta anche le dimensioni delle directory, che sono riportate in modo diverso da diversi filesystem; per evitare questo, il find Il comando è usato per passare solo file regolari a du . Un'altra differenza è che i collegamenti simbolici vengono ignorati (se dovessero essere contati, il find comando dovrebbe essere modificato).

Questo comando consumerà anche più memoria del semplice du -sb , perché usando il --files0-from=FILE rende du memorizza i numeri di dispositivo e inode di tutti file elaborati, in contrasto con il comportamento predefinito di ricordare solo i file con più di un collegamento fisico. (Questo non è un problema se -l viene utilizzata per contare gli hardlink più volte, perché l'unico motivo per memorizzare i numeri di dispositivo e inode è ignorare i file hardlink che erano già stati elaborati.)

Se vuoi ottenere una rappresentazione leggibile dall'uomo della dimensione totale, aggiungi -h opzione (funziona perché du viene invocato solo una volta e calcola la dimensione totale stessa, a differenza di altre risposte suggerite):

find . -type f -print0 | du -scbh --files0-from=- | tail -n 1

o (se sei preoccupato che alcuni effetti di -b vengono quindi sovrascritti da -h )

find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1

Linux
  1. Come ottenere la dimensione della directory in Linux

  2. Come ottenere tutti i file che superano determinate dimensioni ed eliminarli

  3. Come ottenere la dimensione di tar.gz nel file (MB) in python

  4. Come posso vedere la dimensione dei file e delle directory in Linux?

  5. Come ottengo la directory assoluta di un file in bash?

Come contare i file nella directory in Linux

Come ottenere il massimo da Qmmp 1.0

Come trovare la dimensione di una directory in Linux

Come trovare la dimensione totale di una directory in Linux

Come controllare la dimensione di file e directory su Linux

Come scoprire le directory o i file che consumano più spazio?