私はBashのディレクトリのサイズを取得するのは簡単ではないことがわかりましたか?
ls -<some options>
と入力すると、ディレクトリのファイルサイズとファイルの合計をすべて同時にリストし、サイズ順に並べ替えることができます。
それは可能ですか?
ディレクトリに移動し、次のコマンドを実行するだけです:
du -a --max-depth=1 | sort -n
または、人間が読めるサイズの場合は-hを追加し、大きなディレクトリ/ファイルを最初に印刷するには-rを追加します。
du -a -h --max-depth=1 | sort -hr
du -s -- * | sort -n
(これは隠しファイル(.dotfiles)を表示しません)
Mb単位などにdu -sm
を使用します。常に使用します
du -smc -- * | sort -n
明らかな理由により、合計行(-c
)は最後に表示されるためです:)
明らかに--max-depth
オプションはMac OS Xのdu
コマンドのバージョンにはありません。代わりに次を使用できます。
du -h -d 1 | sort -n
du -h --max-depth=0 * | sort -hr
3,5M asdf.6000.gz
3,4M asdf.4000.gz
3,2M asdf.2000.gz
2,5M xyz.PT.gz
136K xyz.6000.gz
116K xyz.6000p.gz
88K test.4000.gz
76K test.4000p.gz
44K test.2000.gz
8,0K desc.common.tcl
8,0K wer.2000p.gz
8,0K wer.2000.gz
4,0K ttree.3
du
は「ディスク使用量」を表示しますh
は、「人間が読める」形式です(並べ替えとデュの両方)max-depth=0
はdu
がサブフォルダーのサイズを表示しないことを意味します(すべてのファイルのすべてのサイズをすべてのサブ、サブサブ、...、フォルダーに表示する場合は削除してください)r
は「リバース」用です(最初に最大のファイル)この質問に来たとき、ファイルシステムをクリーンアップしたかったのです。コマンドラインツールncdu
は、このタスクにより適しています。
Ubuntuへのインストール:
$ Sudo apt-get install ncdu
使用法:
コマンドラインにncdu [path]
と入力するだけです。パスを分析するために数秒後に、次のようなものが表示されます。
$ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / ---------------------------------------------------------
. 96,1 GiB [##########] /home
. 17,7 GiB [# ] /usr
. 4,5 GiB [ ] /var
1,1 GiB [ ] /lib
732,1 MiB [ ] /opt
. 275,6 MiB [ ] /boot
198,0 MiB [ ] /storage
. 153,5 MiB [ ] /run
. 16,6 MiB [ ] /etc
13,5 MiB [ ] /bin
11,3 MiB [ ] /sbin
. 8,8 MiB [ ] /tmp
. 2,2 MiB [ ] /dev
! 16,0 KiB [ ] /lost+found
8,0 KiB [ ] /media
8,0 KiB [ ] /snap
4,0 KiB [ ] /lib64
e 4,0 KiB [ ] /srv
! 4,0 KiB [ ] /root
e 4,0 KiB [ ] /mnt
e 4,0 KiB [ ] /cdrom
. 0,0 B [ ] /proc
. 0,0 B [ ] /sys
@ 0,0 B [ ] initrd.img.old
@ 0,0 B [ ] initrd.img
@ 0,0 B [ ] vmlinuz.old
@ 0,0 B [ ] vmlinuz
現在ハイライトされている要素を削除します dで終了 CTRL + c
ls -S
はサイズでソートします。次に、サイズも表示するために、ls -lS
は長さ(-l
)をサイズ(-S
)でソートして表示します。読みやすくするために、通常-h
も追加するので、ls -lhS
を追加します。
私はあなたが何をしたいのか考えたかもしれないと思う。これにより、ファイルサイズとディレクトリ内のコンテンツのサイズでソートされた、すべてのファイルとすべてのディレクトリのソート済みリストが表示されます。
(find . -depth 1 -type f -exec ls -s {} \;; find . -depth 1 -type d -exec du -s {} \;) | sort -n
私はduを単純な方法で使用する傾向があります。
du -sh */ | sort -n
これにより、どのディレクトリが最もスペースを消費しているかがわかります。その後、より正確な検索を後で実行できます。
[拡張バージョン]
これは、以下の初期バージョンよりもはるかに高速で正確になり、現在のディレクトリのすべてのファイルサイズの合計を出力します:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
ファイルのstat -c %s
コマンドは、サイズをバイト単位で返します。ここのtr
コマンドは、xargs
コマンドの制限を克服するために使用されます(明らかにxargs
へのパイプは、結果をより多くの行に分割し、コマンドのロジックを壊します)。したがって、tr
は、ラインフィードを+
(プラス)記号に置き換えます。 sed
には、通常のように数学を実行する最後のbc
(基本計算機)コマンドからの苦情を避けるために、結果の文字列から最後の+
記号を削除する唯一の目標があります。
パフォーマンス:いくつかのディレクトリと〜150.000ファイル以上(Fedora 15ボックスの現在のファイル数)でテストし、驚くべき結果が得られたと思います:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
du -sb /
コマンドと比較したい場合のために、推定ディスク使用量をバイト単位で出力します(-b
オプション)
# du -sb /
12684646920 /
予想どおり、du
ユーティリティは実際の消費スペースではなく、各ファイルの割り当てられたスペースを返すため、コマンドの計算よりも少し大きくなります。
[初期バージョン]
フォルダーの正確な合計サイズを知る必要がある場合、du
はファイルスペースの使用量を推定するため、du
コマンドは使用できません。したがって、間違った結果、つまり近似値になります(合計サイズに近いかもしれませんが、実際のサイズよりも大きい可能性が高いです)。
私はあなたの質問に答えるさまざまな方法があるかもしれないと思いますが、これは私のものです:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
ですべてのファイルを検索します。ディレクトリ(お好きなディレクトリで変更します)、隠しファイルも含まれ、(xargs
を使用して)名前を1行で出力し、ls -l
を使用して詳細なリストを作成します。この(場合によっては)巨大な出力はcutコマンドにパイプされ、バイト単位のファイルサイズである5番目のフィールド(-f5
)のみが取得され、再びxargs
にパイプされてサイズの単一行が再び生成されますブランクで区切られます。ここで、各空白をプラス(+
)記号で置き換えるsedマジックを実行し、最後にbc
(基本的な計算機)が計算を行います。
追加の調整が必要な場合があり、引数リストについて長すぎるls
コマンドを不平を言う場合があります。
別のシンプルなソリューション。
$ for entry in $(ls); do du -s "$entry"; done | sort -n
結果は次のようになります
2900 tmp
6781 boot
8428 bin
24932 lib64
34436 sbin
90084 var
106676 etc
125216 lib
3313136 usr
4828700 opt
「du -s」を「du -sh」に変更すると、人間が読めるサイズが表示されますが、この方法で並べ替えることはできません。
以下を使用して、サイズでファイルを一覧表示できますdu -h | sort -hr | moreまたはdu -h --max-depth = 0 * | sort -hr |もっと