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


5

試してみると

du -s -h -x /*

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

私はそれが*のシェル展開から来ていると思い、これらのマウントポイントを明示的に含むパラメータリストをduに与えます。

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

私は本当に/のすべてのサブディレクトリをタイプリストに入れたくないようにタイプしたくありません。


私は同様の問題を抱えています。あなたが言うように、 "/ *"は展開されます シェルによって ルートディレクトリのすべてのサブディレクトリに。そのため、 "du -x / *"は個別に考慮される各引数に対して "同じファイルシステムに留まる"ように見えます。これは必ずしも "ルートディレクトリと同じファイルシステム"と同じではありません。 "du -x /"はそれを解決します。
fjf2002

回答:


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 /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/3です。はい、含めるには2/3を入力するよりはましですが、それでも入力したくないものがあります。
Markus N.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.