Исключить все сообщения об отказе в разрешении от du

Я пытаюсь оценить использование диска несколькими учетными записями пользователей Unix. Просто я использую следующую команду:

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

Но я видел много сообщений об ошибках, как показано ниже. Как я могу исключить из отображения все сообщения типа «Permission denied»?

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

Мой запрос может быть очень похож на следующий список, если заменить «найти» на «du».

Как я могу исключить все сообщения с отказом в разрешении из поиска?

Следующий поток не работает. Думаю, я использую bash.

Исключение скрытых файлов из вывода команды du с помощью --exclude, grep -v или sed


person Wen_CSE    schedule 28.02.2013    source источник


Ответы (5)


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

или лучше в bash (просто отфильтруйте эту конкретную ошибку, а не все, как последний фрагмент)

du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 
person MevatlaveKraspek    schedule 28.02.2013
comment
@MevatlaveKraspek - спасибо! если у вас есть время, не могли бы вы объяснить, что делает 2 ›› (grep -v 'Permission denied')? - person Sergej Fomin; 06.08.2018
comment
-v - обратное совпадение. Похоже, он просто фильтрует stderr (2 ›) и скрывает только Permission denied ошибки вместо того, чтобы скрывать все ошибки, как в первой команде. - person huysentruitw; 13.08.2018

2> / dev / nul скрывает только сообщения об ошибках.

команда du всегда пытается пробежать через каталог. Представьте, что у вас тысячи каталогов?

du требуется eval, если у вас есть persmission run, если нет, следуйте следующему каталогу ...

person Cristian T    schedule 25.03.2013

Я бы использовал что-нибудь лаконичное, исключающее только строки, которые вы не хотите видеть. Перенаправить stderr на stdout и grep, чтобы исключить все "запрещенные" s:

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

Если 2>/dev/null не работает, вероятно, используемая вами оболочка не bash.

Чтобы проверить, какую оболочку вы используете, вы можете попробовать ps -p $$ (см. https://askubuntu.com/a/590903/130162)

person 18446744073709551615    schedule 02.11.2017

вы можете передать его во временный файл, например -

du ... > temp_file

Ошибки выводятся на терминал, и только информация об использовании диска печатается в temp_file.

person Prathyusha Sandilya    schedule 27.05.2020