回答:
これは簡単な修正です。du+ sortを使用してください。これを試して:
du -smc * | sort -n
これは隠しファイルを無視しますが、それは別の簡単な修正です:
du -smc .[^.] .??* * | sort -n
これにより、上記のパターンの1つ以上がファイルと一致しない場合に警告が表示される場合があります。最初のパターンは、で.[^.]
始まる2文字すべてのファイル名に一致します。2番目のパターンである..を除いて、で.??*
始まる3文字以上のファイル名すべてに一致します。および*は、で始まらないすべてのファイルに一致します。ファイルシステム全体でXより大きいすべてのファイルを見つける、またはファイルシステムの増加のリストを維持するなどのより高度なリストについては、私が作成したDIYシェルスクリプトがあり、興味があれば共有できます。
sort -nr
最も大きな値を優先する場合に使用します。
ファイルをの下にリストするには/tmp
、サイズ順に並べ替えます。
find /tmp -type f -exec du -k {} + | sort -k1n -k2
ファイルのすぐ下/tmp
にあるディレクトリとツリーをリストするには、サイズ順にソートします。
du -k /tmp/..?* /tmp/.[!.]* /tmp* 2>/dev/null | sort -k1n -k2
の下/tmp
にあるすべてのファイルとディレクトリツリーをサイズ順に並べ替えるには:
du -ak /tmp | sort -k1n -k2
(3つのコマンドの違いを示す例:ファイルがある/tmp/dir/file
場合、最初のコマンドリスト/tmp/dir/file
、2番目のリスト/tmp/dir
、および3 番目のコマンドは両方ともリストします。)
上記のすべてのコマンドは、サイズをキロバイト単位で示しています。GNU duは「人間が読める」サイズ(k、M、Gなどの乗数を使用)を出力できますが、並べ替えは別の問題です。最近の十分のGNU coreutilsの(≥7.4)はそれを行うことができます。ただ置き換えるdu -k
とdu -h
してsort -k1n -k2
とsort -k1h -k2
。それ以外の場合は、サフィックス付きのサイズに変換するための粗いawkスクリプトです(切り捨て)。sort
上記の出力をそれにパイプするだけです。
awk -vFS='\t' -vOFS='\t' '{
if ($1) $1 = substr($1,1,(length($1)-1)%3+1)
substr("kMGTPEZY",(length($1)-1)/3+1,1);
print}'
du
呼び出しのみを使用します。
次のエイリアスを使用しています: alias ds='du -x --all --max-depth=1 . | sort -n'
現在のディレクトリのすべてのファイルと第1レベルのサブディレクトリのサイズを出力します。
現在のバージョンのgnu sort(および@ penguin359ファイルパターンを借用)
cd /tmp; du -sShc .[^.] .??* * | sort -h
古いバージョンの並べ替え
cd /tmp
foo=$(du -sShc .[^.] .??* *)
for u in K M G T; do
echo "$foo" | egrep "^[0-9\.]+$u" | sort -n
done
編集:-Sパラメータを追加しdu
て、サブディレクトリを含めないようにしました。
--apparent-size
、duパラメータに追加できます。
更新:以前のスクリプトを破棄しました。ここでは新バージョン、使用している
du
とawk
(使用前のものtree
とsed
)は、
これは次の出力です。 dusort ~/test 1
================
dir 4.10 KiB /home/user/test/bdir
dir 4.98 KiB /home/user/test/Kdir
dir 104.91 MiB /home/user/test/Mdir
dir 587.47 MiB /home/user/test/Gdir
dir 692.39 MiB /home/user/test
================
f 0 Byt /home/user/test/new file
f 42 Byt /home/user/test/.hi dd en
================
これがスクリプトです
units() { awk -v pfix="$1" \
'BEGIN { yect=6 # Array element-count
split("Byt KiB MiB GiB TiB PiB",lbl)
for (i=1;i<=yect;i++) { val[i] = (2**(10*(i-1)))-1 }
}
{ yess=yect # Array element-subscript
while ( $1 < val[yess] ){ yess-- }
num = $1 / (val[yess]+1)
sub(/^[0-9]*\t*/,"")
if (yess!=1) { printf "%s %8.2f %s %s\n", pfix, num, lbl[yess], $0 }
else { printf "%s %5d %s %s\n", pfix, num, lbl[yess], $0 }
}'
}
tdir="/tmp/$USER/$(basename $0)"
[[ ! -d "$tdir" ]] && mkdir -p "$tdir"
file="$tdir/$(date +%N)"
echo "================"
dirs="$file.dirs"; du --max-depth=$2 -b $1 >"$dirs" ; <"$dirs" sort -n | units "dir"
echo "================"
filz="$file.filz"; { du --max-depth=$2 -ab $1 ; cat "$dirs" ; } | sort -n | uniq -u | units " f "
echo "================"
rm "$file."*
#
tree
行います。ディスク領域を使用したい場合は、それをdu
行います(tree
ディレクトリを合計しません)
man du
ことも報告できることを、「見かけ上のファイルサイズを」 .... The apparent size of a file is the number of bytes reported by
、より一般的には通常のファイルに「トイレ-c、またはls -l --block-size=1' or
STAT --format =% s '。例えば、単語を含むファイルzoo' with no newline would, of course, have an apparent size of 3.