GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je trouver des fichiers et calculer leur taille ?

Solution

En fournissant l'option -c (ou --total ) à du(1) , vous pouvez lui demander de produire un total général. Si votre implémentation de du(1) prend en charge l'une ou l'autre de ces options, vous pouvez obtenir l'effet souhaité à l'aide de la commande suivante :

$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +

MODIF : Notez que si le nombre de fichiers dépasse le nombre maximum de paramètres autorisés par votre système, find peut toujours exécuter command plusieurs fois. Quelques implémentations de du(1) prend également en charge la lecture des noms de fichiers à partir d'un fichier, qui ne souffre pas de la limitation mentionnée :

$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames

Explication

La différence entre la sémantique de -exec command {} \; et -exec command {} + est le suivant :

  • command {} \; exécute command une fois pour chaque résultat de find . Le chemin du résultat est passé à la place de {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} \;
    1
    2
    3
    
  • command {} + exécute command , lorsque tous les résultats ont été récupérés. Les chemins des résultats sont passés à la place de {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} +
    1 2 3
    

Le -print0 l'option provoque find(1) pour imprimer les noms de fichiers trouvés sur la sortie standard séparés par le caractère nul et le --files0-from l'option a causé du(1) pour lire les noms de fichiers séparés par des valeurs nulles. Contrairement au caractère de nouvelle ligne, le caractère nul peut ne pas apparaître dans un nom de fichier, de sorte que la sortie est sans ambiguïté.

Pour en savoir plus sur les options de du(1) et find(1) , vous devriez consulter les pages de manuel respectives :

$ man du
$ man find

Essayez ceci :

du -c `find . -name 'flibble*' -ctime +90` | tail -1

La commande d'origine donne un argument à du, puis l'exécute jusqu'à ce qu'elle parcoure tous les arguments. De cette façon, vous lui donnez simplement tous les arguments à la fois, puis coupez les tailles séparées et ne laissez que le total. Vous pouvez supprimer le tuyau et la queue pour afficher la taille de chaque fichier si vous le souhaitez.


Vous pouvez essayer ceci :

find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total

Linux
  1. Comment trouver les fichiers de configuration MySQL, PHP et Apache

  2. Comment trouver des fichiers avec des autorisations SUID et SGID sous Linux

  3. Utilisation de ls pour lister les répertoires et leurs tailles totales

  4. Rechercher et copier des fichiers

  5. Comment compter le nombre total de lignes de fichiers trouvés ?

Comment rechercher et répertorier récursivement les fichiers par date sous Linux

Comment rechercher et supprimer des fichiers en double sous Linux

Comment rechercher et supprimer des fichiers contenant un texte spécifique dans leurs noms sous Linux

Comment trouver des fichiers en fonction de leurs autorisations sous Linux

Comment trouver des fichiers en double sous Linux et les supprimer

Comment trouver des fichiers dans Debian