[bash] stats des fichiers par taille

stats des fichiers par taille [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-10-2009 à 22:40:00    

Le but de ce script est de déterminer le nombre de petits fichiers (ou pas) dans un dossier.
On peut spécifier les tailles que l'ont veut dans la variable size_list_to_find.

 

Bon c'est sûrement peu de chose, mais voici le petit script que je viens de faire pour compter le nombre de fichier et les trier par taille:

Code :
  1. #!/bin/bash
  2. ## ${0##*/} utilise les "parameter expansions" pour decouper la chaine
  3. echo ">>> Start of ${0##*/}";
  4. ################################################################################
  5. # Variables personnelles                                                       #
  6. ################################################################################
  7. # Liste des tailles des fichiers à rechercher
  8. size_list_to_find=( -1 2 4 8 16 32 64 128 256 512 1024 +1024 );
  9. ################################################################################
  10. # Variables nécessaires pour le script                                         #
  11. ################################################################################
  12. source /etc/profile;
  13. # Sauvegarde de l'IFS
  14. oIFS="$IFS";
  15. # Caractère de découpage (Input Field Separator)
  16. IFS=$'\n';
  17. # dossier où commencer la recherche
  18. dossier=$1;
  19. total_files=0;
  20. total_folders=0;
  21. echo "Dossier de travail: ${dossier}";
  22. for size in ${size_list_to_find[@]}; do
  23. # taille minimale à rechercher
  24. taille_basse=1;
  25. # taille maximale à rechercher
  26. taille_haute=$size;
  27. # determination de la fourchette de taille, si nulle on ne recherche que sur une taille
  28. if [[ "$taille_haute" != "*+*" ]]; then
  29.  if ((taille_haute / 2 + 1 < taille_haute )); then
  30.   (( taille_basse = size/2 + 1 ));
  31.  fi
  32. fi
  33. #echo -n "${taille_basse} - ${taille_haute}";
  34. if [[ $taille_haute != *+* && $taille_haute != *-* ]]; then
  35.  # pour toutes les tailles hors la dernière et pour une taille minimale et maximale
  36.  echo -n "    Recherche des fichiers de taille: ${taille_basse}k-${taille_haute}k :: ";
  37.  # le paramètre -size de la commande find est exclusif. Les chiffres spécifiés ne sont pas inclus dans les résultats
  38.  # Il faut donc élagir cette fourchette pour inclure les valeurs spécifiée dans size_list_to_find
  39.  (( taille_basse -= 1 ));
  40.  (( taille_haute += 1 ));
  41.  nombre=`find ${dossier} -size +${taille_basse}k -and -size -${taille_haute}k -type f 2> /dev/null | grep -c ${dossier}`;
  42.  (( total_files += nombre ));
  43.  echo "    ${nombre}";
  44. else
  45.  # pour la dernière taille trouvée ou pour une seule taille de fichier
  46.  echo -n "    Recherche des fichiers de taille: ${size}k :: ";
  47.  # pour la première taille, on veut connaitre le nombre de fichier dont la taille est inférieure ou égale à 1k
  48.  if [[ $taille_haute = *-* ]]; then
  49.   (( taille_haute += 2 ));
  50.   signe="-";
  51.  fi
  52.  #pour la dernière taille, on veut connaitre le nombre de fichier dont la taille est supérieure ou égale à 1024k
  53.  if [[ $taille_haute = *+* ]]; then
  54.   (( taille_haute -= 1 ));
  55.   signe="+";
  56.  fi
  57.  nombre=`find ${dossier} -size ${signe}${taille_haute}k -type f 2> /dev/null | grep -c ${dossier}`;
  58.  (( total_files += nombre ));
  59.  echo "    ${nombre}";
  60. fi
  61. done;
  62. echo "Nombre de total de fichiers trouvés: ${total_files}";
  63. total_folders=`find ${dossier} -type d 2> /dev/null | grep -c ${dossier}`;
  64. echo "Nombre total de dossiers parcourus pendant cette recherche: ${total_folders}";
  65. (( total = total_files + total_folders ));
  66. echo "Nombre total d'éléments parcourus: ${total}";
  67. ## /


Code :
  1. sudo ./ssd_file_sizes /home/thana/
  2. >>> Start of ssd_file_sizes
  3. Dossier de travail: /home/thana/
  4.     Recherche des fichiers de taille: -1k ::     49
  5.     Recherche des fichiers de taille: 1k-2k ::     2348
  6.     Recherche des fichiers de taille: 3k-4k ::     675
  7.     Recherche des fichiers de taille: 5k-8k ::     1006
  8.     Recherche des fichiers de taille: 9k-16k ::     1450
  9.     Recherche des fichiers de taille: 17k-32k ::     2807
  10.     Recherche des fichiers de taille: 33k-64k ::     2195
  11.     Recherche des fichiers de taille: 65k-128k ::     1782
  12.     Recherche des fichiers de taille: 129k-256k ::     73
  13.     Recherche des fichiers de taille: 257k-512k ::     38
  14.     Recherche des fichiers de taille: 513k-1024k ::     34
  15.     Recherche des fichiers de taille: +1024k ::     17
  16. Nombre de total de fichiers trouvés: 12474
  17. Nombre total de dossiers parcourus pendant cette recherche: 1225
  18. Nombre total d'éléments parcourus: 13699
 


Par la suite, je pense rajouter un petit % pour tirer plus des conclusions.


Message édité par thana54 le 29-10-2009 à 19:20:55
Reply

Marsh Posté le 28-10-2009 à 22:40:00   

Reply

Marsh Posté le 28-10-2009 à 22:47:48    

Là c'est flagrant, je n'ai apparemment pas de fichiers >1Mo, mais pourtant j'ai plus de 400Go :/

Citation :

sudo ./ssd_file_sizes /media/
>>> Start of ssd_file_sizes
Dossier de travail: /media/
    Recherche des fichiers de taille: 0k-1k =>    0
    Recherche des fichiers de taille: 1k-2k =>    0
    Recherche des fichiers de taille: 2k-4k =>    1854
    Recherche des fichiers de taille: 4k-8k =>    2702
    Recherche des fichiers de taille: 8k-16k =>    3087
    Recherche des fichiers de taille: 16k-32k =>    2420
    Recherche des fichiers de taille: 32k-64k =>    2574
    Recherche des fichiers de taille: 64k-128k =>    1834
    Recherche des fichiers de taille: 128k-256k =>    1107
    Recherche des fichiers de taille: 256k-512k =>    1297
    Recherche des fichiers de taille: 512k-1024k =>    1745
    Recherche des fichiers de taille: >+1024k =>    1
Nombre de total de fichiers trouvés: 18621
Nombre total de dossiers parcourus pendant cette recherche: 3544
Nombre total d'éléments parcourus: 22165


Citation :

du /media/ -s 2> /dev/null
467G /media/
467G total


comment savoir que le find -size +/-size est inclusif ou pas ?


Message édité par thana54 le 28-10-2009 à 22:48:48
Reply

Marsh Posté le 29-10-2009 à 18:18:48    

Mise à jour du script, j'en récupère un peu plus, mais toujours pas autant qu'avec un find -type f :/

Reply

Marsh Posté le 29-10-2009 à 19:22:05    

Citation :

sudo ./ssd_file_sizes /home/thana/
>>> Start of ssd_file_sizes
Dossier de travail: /home/thana/
    Recherche des fichiers de taille: -1k ::     49
    Recherche des fichiers de taille: 1k-2k ::     2348
    Recherche des fichiers de taille: 3k-4k ::     675
    Recherche des fichiers de taille: 5k-8k ::     1006
    Recherche des fichiers de taille: 9k-16k ::     1450
    Recherche des fichiers de taille: 17k-32k ::     2807
    Recherche des fichiers de taille: 33k-64k ::     2195
    Recherche des fichiers de taille: 65k-128k ::     1782
    Recherche des fichiers de taille: 129k-256k ::     73
    Recherche des fichiers de taille: 257k-512k ::     38
    Recherche des fichiers de taille: 513k-1024k ::     34
    Recherche des fichiers de taille: +1024k ::     17
Nombre de total de fichiers trouvés: 12474
Nombre total de dossiers parcourus pendant cette recherche: 1225
Nombre total d'éléments parcourus: 13699


Citation :


sudo find /home/thana/ -type f 2> /dev/null  | grep /home/thana/ -c
12474
sudo find /home/thana/ -type d 2> /dev/null  | grep /home/thana/ -c
1225

 



Victory [:volta]

 

Vous pouvez tester histoire de valider ou non le script :jap:


Message édité par thana54 le 29-10-2009 à 19:22:35
Reply

Marsh Posté le 29-10-2009 à 19:53:43    

Fonctionne parfaitement chez moi.
 

Code :
  1. >>> Start of files_size_stats
  2. Dossier de travail: /home/gounette
  3.     Recherche des fichiers de taille: -1k ::     443
  4.     Recherche des fichiers de taille: 1k-2k ::     82842
  5.     Recherche des fichiers de taille: 3k-4k ::     11917
  6.     Recherche des fichiers de taille: 5k-8k ::     10836
  7.     Recherche des fichiers de taille: 9k-16k ::     12846
  8.     Recherche des fichiers de taille: 17k-32k ::     23435
  9.     Recherche des fichiers de taille: 33k-64k ::     6834
  10.     Recherche des fichiers de taille: 65k-128k ::     3190
  11.     Recherche des fichiers de taille: 129k-256k ::     1772
  12.     Recherche des fichiers de taille: 257k-512k ::     1637
  13.     Recherche des fichiers de taille: 513k-1024k ::     690
  14.     Recherche des fichiers de taille: +1024k ::     4438
  15. Nombre de total de fichiers trouvés: 160880
  16. Nombre total de dossiers parcourus pendant cette recherche: 11136
  17. Nombre total d'éléments parcourus: 172016


 
 :jap:

Reply

Marsh Posté le 29-10-2009 à 22:23:05    

Test sur mon /media/ qui comprend de l'ext3 et du ntfs, ca passe plutôt bien

Citation :

sudo ./ssd_file_sizes /media/
[sudo] password for thana:  
>>> Start of ssd_file_sizes
Dossier de travail: /media/
    Recherche des fichiers de taille: -1k ::     133
    Recherche des fichiers de taille: 1k-2k ::     8257
    Recherche des fichiers de taille: 3k-4k ::     3099
    Recherche des fichiers de taille: 5k-8k ::     3368
    Recherche des fichiers de taille: 9k-16k ::     3363
    Recherche des fichiers de taille: 17k-32k ::     2527
    Recherche des fichiers de taille: 33k-64k ::     2652
    Recherche des fichiers de taille: 65k-128k ::     1854
    Recherche des fichiers de taille: 129k-256k ::     1123
    Recherche des fichiers de taille: 257k-512k ::     1302
    Recherche des fichiers de taille: 513k-1024k ::     1746
    Recherche des fichiers de taille: +1024k ::     3479
Nombre de total de fichiers trouvés: 32903
Nombre total de dossiers parcourus pendant cette recherche: 3544
Nombre total d'éléments parcourus: 36447


thunar me dis que j'ai tout ca:

Citation :

36453 éléments, totalisant 466,8 GB


Petit écart qui reste, mais qui peut fausser le calcul [:transparency]

Reply

Marsh Posté le 30-10-2009 à 22:16:27    

L'écart se creuse:

Citation :

./ssd_file_size / && find / -type f | grep -c /  
>>> Start of ssd_file_size
Dossier de travail: /
    Recherche des fichiers de taille: -1k ::     22657
    Recherche des fichiers de taille: 1k-2k ::     41706
    Recherche des fichiers de taille: 3k-4k ::     17754
    Recherche des fichiers de taille: 5k-8k ::     8401
    Recherche des fichiers de taille: 9k-16k ::     8799
    Recherche des fichiers de taille: 17k-32k ::     7548
    Recherche des fichiers de taille: 33k-64k ::     4316
    Recherche des fichiers de taille: 65k-128k ::     2374
    Recherche des fichiers de taille: 129k-256k ::     1122
    Recherche des fichiers de taille: 257k-512k ::     878
    Recherche des fichiers de taille: 513k-1024k ::     468
    Recherche des fichiers de taille: +1024k ::     1062
Nombre de total de fichiers trouvés: 117085
Nombre total de dossiers parcourus pendant cette recherche: 14365
Nombre total d'éléments parcourus: 131450
 
find: "/proc/10733/task/10733/fd/5": Aucun fichier ou dossier de ce type
find: "/proc/10733/task/10733/fdinfo/5": Aucun fichier ou dossier de ce type
find: "/proc/10733/fd/5": Aucun fichier ou dossier de ce type
find: "/proc/10733/fdinfo/5": Aucun fichier ou dossier de ce type
116851


Et d'après thunar: 173865 éléments :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed