GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir la taille réelle du répertoire (hors du) ?

Certaines versions de du prendre en charge l'argument --apparent-size pour afficher la taille apparente au lieu de l'utilisation du disque. Donc votre commande serait :

du -hs --apparent-size

À partir des pages de manuel pour du incluses avec 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

Voici un script affichant une taille de répertoire lisible par l'homme à l'aide des outils 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()}'

ex :

$ ds ~        
72.891 GiB

En supposant que vous avez du à partir de GNU coreutils, cette commande doit calculer la taille apparente totale d'un nombre arbitraire de fichiers réguliers dans un répertoire sans aucune limite arbitraire sur le nombre de fichiers :

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

Ajoutez le -l option à du s'il y a des fichiers liés en dur à l'intérieur et que vous voulez compter chaque lien dur séparément (par défaut du compte plusieurs liens physiques une seule fois).

La différence la plus importante avec le simple du -sb est-ce récursif du compte également la taille des répertoires, qui sont signalés différemment par différents systèmes de fichiers ; pour éviter cela, le find La commande est utilisée pour transmettre uniquement des fichiers normaux à du . Une autre différence est que les liens symboliques sont ignorés (s'ils doivent être comptés, le find la commande doit être ajustée).

Cette commande consommera également plus de mémoire que le simple du -sb , car en utilisant le --files0-from=FILE fait du stocker les numéros d'appareil et d'inode de tous fichiers traités, par opposition au comportement par défaut consistant à ne mémoriser que les fichiers avec plus d'un lien physique. (Ce n'est pas un problème si le -l est utilisée pour compter plusieurs fois les liens physiques, car la seule raison de stocker les numéros de périphérique et d'inode est d'ignorer les fichiers liés qui ont déjà été traités.)

Si vous souhaitez obtenir une représentation lisible par l'homme de la taille totale, ajoutez simplement le -h option (cela fonctionne car du n'est invoqué qu'une seule fois et calcule lui-même la taille totale, contrairement à d'autres réponses suggérées) :

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

ou (si vous craignez que certains effets de -b sont alors remplacés par -h )

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

Linux
  1. Comment obtenir la taille du répertoire sous Linux

  2. Comment puis-je obtenir par programme l'espace disque libre pour un répertoire sous Linux

  3. Comment obtenir tous les fichiers dépassant une certaine taille et les supprimer

  4. Comment obtenir la taille de tar.gz dans le fichier (Mo) en python

  5. Comment puis-je voir la taille des fichiers et des répertoires sous Linux ?

Comment compter les fichiers dans le répertoire sous Linux

Comment tirer le meilleur parti de Qmmp 1.0

Comment trouver la taille d'un répertoire sous Linux

Comment trouver la taille totale d'un répertoire sous Linux

Comment vérifier la taille des fichiers et du répertoire sous Linux

Comment trouver les répertoires ou fichiers les plus gourmands en espace ?