web-dev-qa-db-ja.com

du -xは、ワイルドカードを使用するときに、マウントされたファイルシステムを引き続き検査します

やってみたら

du -s -h -x /*

/の直下にマウントされているすべてのファイルシステム(実数および疑似)を調べようとします。/dev、/ proc、/ sys、/ run、および/ home(/ homeは追加のパーティションにあります)。

*のシェル拡張に由来すると思います。duにこれらのマウントポイントを明示的に含むパラメータリストを与えます。

マウントポイントがパラメータリストに含まれている場合でも、マウントされたファイルシステムを検査しないようにする方法はありますか?

/のすべてのサブディレクトリを入力したくないのは、パラメータリストに含まれないようにするためです。

6
Markus N.

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
4
BatchyX

私はあなたが正しいと思います。あなたは実際にdu /devdu /sysdu /usrdu /homeしたがって、「-x」オプションは無意味です。

ループしてみませんか?例えば。 find / -maxdepth 1 | egrep -v home|mediaは、ホームとメディアを除くすべてのディレクトリを一覧表示します。次に、出力をwhileループにパイプしてduに送ることができます。

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

duコマンドで*を使用しません。次のようなものを使用します。

du -hx --max-depth=1| sort -h

または

du -hx / --max-depth=1| sort -h
0
bookworm