私のシステムのデフォルト動作はdu
正しいデフォルト動作ではありません。
ls
フォルダを表示すると、次/data
の内容が表示されます(重要でないアイテムを削除します)。
ghs
ghsb -> ghs
hope
rssf -> roper
roper
各フォルダには、番号と呼ばれるフォルダセットがあります。14
以下を使用して、名前付きのすべてのフォルダの合計サイズを取得したいと思います。
du -s /data/*/14
私は見ました...
161176 /data/ghs/14
161176 /data/ghsb/14
8 /data/hope/14
681564 /data/rssf/14
681564 /data/roper/14
私が望むもの:
161176 /data/ghs/14
8 /data/hope/14
681564 /data/roper/14
私はシンボリックリンクを見たくありません。-L
、、-D
などを試してみました-S
。私はいつもシンボリックリンクを取得します。削除する方法はありますか?
答え1
これはdu
シンボリックリンクをチェックするのではなく、シンボリックリンクをチェックすることです。これがあなたの殻です。
*
シェル球です。コマンドが実行される前にシェルによって拡張されます。したがって、実際に実行されているコマンドは次のようになります。
du -s /data/ghs/14 /data/ghsb/14 /data/hope/14 /data/rssf/14 /data/roper/14
シェルがbashの場合、シンボリックリンクを拡張しないように指示する方法はありません。ただし、find
代わりに(GNUバージョン)を使用できます。
find /data -mindepth 2 -maxdepth 2 -type d -name 14 -exec du -s {} +
答え2
du
スキップシンボリックリンクを作成します。
du
リンクを追跡しないほどスマートではありません。デフォルトでは、find
シンボリックリンクはスキップされます。したがってfind
、と正しい黒魔法呪文du
の間に不正な同盟を作ることは次のとおりです。awk
find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print total}'
生産:
145070492
出力を人間が読めるように強制します。
find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print (total / 1024 / 1024) "MB"}'
生産:
138.35MB
ここで何が起こっていますか?
/home/somedirectory/ directory to search.
-exec du -s + run du -s over the results, producing bytes
awk '...' get the first token of every line and add them up,
dividing by 1024 twice to produce MB
答え3
このフラグを使用してください-L
。
マニュアルページから:
-L, --dereference
dereference all symbolic links
次にduは、シンボルの有無にかかわらずサイズを計算します。
答え4
du -P
-P、--no-dereferenceはシンボリックリンクに従わない(デフォルト)