web-dev-qa-db-ja.com

どのように多くのスペースを占めているかをどのように判断できますか?

私はdf -hを使用して、人間が読めるディスク使用量を出力していました。何がそんなに多くを占めているのかを知りたいのですが。たとえば、このコマンドをパイプして1GBより大きいサイズのファイルを出力する方法はありますか?他のアイデア?

ありがとう

30
syn4k

私はこれをよく使います。

du -kscx *

実行には少し時間がかかる場合がありますが、ディスク領域がどこで使用されているかがわかります。

26
toppledwagon

次の場所にあるncduユーティリティを試してみてください: http://dev.yorhel.nl/ncd

ファイルシステムまたはディレクトリツリーの内容をすばやく合計し、結果をサイズ順に並べて出力します。これは、対話的にドリルダウンしてドライブスペースを消費しているものを確認するのに非常に便利な方法です。

さらに、一部のduの組み合わせよりも高速になる場合があります。

典型的な出力は次のようになります。

ncdu 1.7 ~ Use the arrow keys to navigate, press ? for help                                                         
--- /data ----------------------------------------------------------------------------------------------------------
  163.3GiB [##########] /docimages                                                                                  
   84.4GiB [#####     ] /data
   82.0GiB [#####     ] /sldata
   56.2GiB [###       ] /prt
   40.1GiB [##        ] /slisam
   30.8GiB [#         ] /isam
   18.3GiB [#         ] /mail
   10.2GiB [          ] /export
    3.9GiB [          ] /edi   
    1.7GiB [          ] /io     
    1.2GiB [          ] /dmt
  896.7MiB [          ] /src
  821.5MiB [          ] /upload
  691.1MiB [          ] /client
  686.8MiB [          ] /cocoon
  542.5MiB [          ] /hist
  358.1MiB [          ] /savsrc
  228.9MiB [          ] /help
  108.1MiB [          ] /savbin
  101.2MiB [          ] /dm
   40.7MiB [          ] /download
35
ewwhite

Findコマンドを使用できます。例:

find /home/ -size +1073700000c -print
8
ChriSxStyles

私自身が使用しています

 du -c --max-depth = 4/dir |並べ替え-n 

これは、ディレクトリとそのサブディレクトリが使用する最大4深さまでのスペースの量を返します。sort -nは、最大のものを最後に配置します。

sortの新しいバージョンは「人間が読める」サイズを処理できるため、より読みやすいサイズを使用できます

du -hc --max-depth=4 /dir | sort -h
6
Hubert Kario

1つのディレクトリで大きなファイルを再帰的に検索する

私は多くのスペースをとっているものを特定する必要があったので多くの時間を費やしているので、上の小さな職業を検索するためにこの小さなスクリプトを書きました特定のデバイス(引数なしで、これは現在のディレクトリを参照し、> 256Mbディレクトリエントリを検索します):

_#!/bin/bash

humansize() {
    local _c=$1 _i=0 _a=(b K M G T P)
    while [ ${#_c} -gt 3 ] ;do
    ((_i++))
    _c=$((_c>>10))
    done
    _c=$(( ( $1*1000 ) >> ( 10*_i ) ))
    printf ${2+-v} $2 "%.2f%s" ${_c:0:${#_c}-3}.${_c:${#_c}-3} ${_a[_i]}
}

export device=$(stat -c %d "${1:-.}")
export minsize=${2:-$((256*1024**2))}

rdu() {
    local _dir="$1" _spc="$2" _crt _siz _str
    while read _crt;do
    if [ $(stat -c %d "$_crt") -eq $device ];then
            _siz=($(du -xbs "$_crt"))
            if [ $_siz -gt $minsize ];then
        humansize $_siz _str
        printf "%s%12s%14s_%s\n" "$_spc" "$_str" \\ "${_crt##*/}"
        [ $d "$_crt" ] && rdu "$_crt" "  $_spc"
        fi
    fi
    done < <(
    find "$_dir" -mindepth 1 -maxdepth 1 -print
    )
}

rdu "${1:-.}"
_

使用例:

_./rdu.sh /usr 100000000
       1.53G             \_lib
       143.52M             \_i386-linux-gnu
       348.16M             \_x86_64-linux-gnu
       107.80M             \_jvm
         100.20M             \_Java-6-openjdk-AMD64
           100.17M             \_jre
              99.65M             \_lib
       306.63M             \_libreoffice
         271.75M             \_program
       107.98M             \_chromium
      99.57M             \_lib32
     452.47M             \_bin
       2.50G             \_share
       139.63M             \_texlive
         129.74M             \_texmf-dist
       478.36M             \_locale
       124.49M             \_icons
       878.09M             \_doc
         364.02M             \_texlive-latex-extra-doc
           359.36M             \_latex
_

少しチェック:

_du -bs /usr/share/texlive/texmf-dist
136045774   /usr/share/texlive/texmf-dist
echo 136045774/1024^2 | bc -l
129.74336051940917968750
_

注意:_-b_の代わりに_-k_を使用してduに使用されたバイトのみを要約し、有効な予約スペースは要約しないように指示します(512バイトのブロックごと)。ブロックサイズについて作業するには、_du -xbs ..._を_du -xks_で変更し、b_a=(K M G T P)で省略し、引数のサイズを1024で除算する必要があります。

...デフォルトでblocksサイズを使用する修正バージョンがあります(私自身は保持します)が、最初の引数として_-b_を受け入れますバイト計算:

編集:新しいバージョン

いくつかの作業の後、新しいバージョンがたくさんありますquiickerで、出力はサイズの降順で並べ替えられています。

_#!/bin/bash

if [ "$1" == "-b" ] ;then
    shift
    export units=(b K M G T P)
    export duargs="-xbs"
    export minsize=${2:-$((256*1024**2))}
else
    export units=(K M G T P)
    export duargs="-xks"
    export minsize=${2:-$((256*1024))}
fi

humansize() {
    local _c=$1 _i=0
    while [ ${#_c} -gt 3 ] ;do
    ((_i++))
    _c=$((_c>>10))
    done
    _c=$(( ( $1*1000 ) >> ( 10*_i ) ))
    printf ${2+-v} $2 "%.2f%s" ${_c:0:${#_c}-3}.${_c:${#_c}-3} ${units[_i]}
}

export device=$(stat -c %d "${1:-.}")

rdu() {
    local _dir="$1" _spc="$2" _crt _siz _str
    while read _siz _crt;do
        if [ $_siz -gt $minsize ];then
        humansize $_siz _str
        printf "%s%12s%14s_%s\n" "$_spc" "$_str" \\ "${_crt##*/}"
        [ -d "$_crt" ] &&
        [ $(stat -c %d "$_crt") -eq $device ] &&
            rdu "$_crt" "  $_spc"
    fi
    done < <(
    find "$_dir" -mindepth 1 -maxdepth 1 -xdev \
        \( -type f -o -type d \) -printf "%D;%p\n" |
        sed -ne "s/^${device};//p" |
        tr \\n \\0 |
        xargs -0 du $duargs |
        sort -nr
    )
}

rdu "${1:-.}"
_
1
F. Hauri

人間が読めるサイズ:

du -hscx *
1
Jekis

現在のフォルダー内の最大の上位20ディレクトリを表示するには、次のワンライナーを使用します。

du -ah . | sort -rh | head -20

または:

du -a . | sort -rn | head -20

現在のディレクトリの上位20ファイル(再帰的に):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

または人間が読めるサイズ:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

OSX/BSDで正しく機能する2番目のコマンド(sortには-hがないため)、sortcoreutilsからインストールする必要があります。次に、binフォルダーをPATHに追加します。

したがって、これらのエイリアスはrcファイルに含めると便利です(必要なときはいつでも)。

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
0
kenorb