5

Если я попробую

du -s -h -x /*

он попытается проверить все файловые системы (реальные и псевдо), смонтированные непосредственно в /, например, /dev, /proc, /sys, /run и /home (/home находится на дополнительном разделе).

Я думаю, что это происходит из расширения оболочки *, давая du список параметров, который явно включает эти точки монтирования.

Есть ли способ заставить du не проверять смонтированные файловые системы, даже если точки монтирования содержатся в списке параметров?

Я действительно не хочу вводить все подкаталоги / просто чтобы они не были в списке параметров.

2 ответа2

4

Вы все еще можете отфильтровать это, используя mountpoint (если доступно в вашей системе):

for a in /*; do mountpoint -q -- "$a" || du -s -h -x "$a"; done

Если mountpoint недоступна, но stat есть (хотя stat все еще не POSIX, это может быть более распространенным), вам придется сравнить вывод stat вручную:

rootdevice="$(stat -c %D /)"
for a in /*; do [ "$rootdevice" = "$(stat -c %D -- "$a")" ] && du -s -h -x "$a"; done
0

Я полагаю, вы правы. Вы на самом деле говорите du /dev , du /sys , du /usr , du /home поэтому опция "-x" не имеет смысла.

Почему бы вам не зацикливаться на этом? Например, find / -maxdepth 1 | egrep -v home|media перечислит все каталоги, кроме home и media. После этого вы можете трубы выход на while цикла du его.

find / -maxdepth 1 | egrep -v home|media | while read f; do
  du -s -h -x "$f"; 
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .