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.
du -s --exclude='*.html' /var/foo
Si vous souhaitez faire correspondre positivement les *.pdf
fichiers, vous devrez utiliser une autre méthode pour répertorier les fichiers et du
afficher au moins une ligne de sortie par argument, plus un grand total avec l'option -c
. Vous pouvez appeler tail
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.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
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'abord shopt -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.
du -sc /var/foo/**/*.pdf | tail -n1
Une complication supplémentaire avec la version find est que s'il y a trop de fichiers, find
s'exécutera du
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.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?