web-dev-qa-db-fra.com

Exclure tous les messages refusés de "du"

J'essaie d'évaluer l'utilisation du disque d'un certain nombre de comptes utilisateur Unix . J'utilise simplement la commande suivante:

du -cBM --max-depth=1 | sort -n

Mais j’ai vu de nombreux messages d’erreur comme ci-dessous. Comment puis-je exclure tous les messages de ce type «Permission refusée»?

du: `./james/.gnome2': Permission denied

Ma demande pourrait être très similaire à la liste suivante, en remplaçant «find» par «du».

Comment puis-je exclure tous les messages "autorisation refusée" de "trouver"?

Le fil suivant ne fonctionne pas. Je suppose que j'utilise bash.

Exclusion des fichiers cachés de la sortie de la commande du avec --exclude, grep -v ou sed

34
Wen_CSE
du -cBM --max-depth=1 2>/dev/null | sort -n 

ou mieux en bash (il suffit de filtrer cette erreur particulière, pas comme le dernier extrait)

du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 
53
MevatlaveKraspek

2>/dev/nul ne masque que les messages d'erreur. 

la commande du essaie toujours de repasser sur le répertoire. Imaginez que vous avez des milliers de dirs?

du a besoin de eval, si vous avez une persmission lancée sinon, suivez avec le prochain dir ...

2
Cristian T

Si 2>/dev/null ne fonctionne pas, le shell que vous utilisez n'est probablement pas bash.

Pour vérifier quel Shell vous utilisez, vous pouvez essayer ps -p $$ (voir https://askubuntu.com/a/590903/130162 )

0

J'utiliserais quelque chose de concis qui exclut uniquement les lignes que vous ne voulez pas voir. Réorienter stderr vers stdout et grep pour exclure tous les "refusés":

du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n 
0
Claire T