J'ai des centaines de fichiers pdf et html dans un répertoire. Et je veux connaître la taille totale des fichiers pdf.
Par commande, du -ch /var/foo
je peux voir la taille totale du fichier mais je n'ai besoin que de la dernière ligne, la taille totale.
Si le répertoire ne contient que des fichiers pdf, je peux utiliser l' -s
option, mais l'option ne peut pas être utilisée cette fois.
Comment puis-je obtenir uniquement la taille totale d'un type de fichier particulier?
shell
wildcards
disk-usage
fer à repasser
la source
la source
du -sh /foo/*.pdf
?du -ch /var/foo/*.pdf | tail -n 1
Réponses:
Avec GNU
du
(c'est-à-dire sur Linux non intégré ou Cygwin), vous pouvez utiliser l'--exclude
option pour exclure les fichiers que vous ne souhaitez pas faire correspondre.Si vous souhaitez faire correspondre positivement les
*.pdf
fichiers, vous devrez utiliser une autre méthode pour répertorier les fichiers etdu
afficher au moins une ligne de sortie par argument, plus un grand total avec l'option-c
. Vous pouvez appelertail
pour supprimer toutes les lignes sauf la dernière, ou sed pour supprimer également le mot «total». Pour énumérer les fichiers de ce répertoire, utilisez des caractères génériques dans le shell.Si vous devez également parcourir des fichiers dans des sous-répertoires, utilisez
find
ou utilisez un**/
modèle si votre shell le prend en charge. Pour**/
, dans bash, lancez d'abordshopt -s extglob
, et notez que les versions bash jusqu'à 4.2 traverseront des liens symboliques vers des répertoires; en zsh, cela fonctionne hors de la boîte.Une complication supplémentaire avec la version find est que s'il y a trop de fichiers,
find
s'exécuteradu
plus d'une fois, pour rester sous la limite de longueur de ligne de commande. Avec la méthode des caractères génériques, vous obtiendrez une erreur si cela se produit («limite de longueur de ligne de commande dépassée»). Le code suivant suppose que vous n'avez aucun nom de fichier correspondant contenant une nouvelle ligne.la source
--exclude='*.html'
cela/var/foo/dir.html/foo.pdf
ne serait pas pris en compte car les exclusions affectent également la traversée des répertoires; aussi, l'utilisation du disque des répertoires, y compris/var/foo
lui-même, serait prise en compte)Vous pouvez laisser le shell développer les fichiers:
Cependant, comme vous pouvez le voir, cela indique que la taille des fichiers est environ 1000 fois celle qui vient d'être créée. Une meilleure option utilise l'
-b
option:Les fichiers de grande taille seront toujours affichés sous une forme lisible par l'homme, par exemple
173K
.la source
du
montre l'utilisation du disque de chaque fichier (sur la plupart des systèmes de fichiers, c'est la taille du fichier arrondie au multiple suivant de la taille du bloc). Avec l'option-b
,du
affiche la taille de chaque fichier.