Bashでフォルダーサイズを確認する


317

ディレクトリサイズを計算し、サイズが10 GB未満で2 GBを超える場合は何らかのアクションを実行するスクリプトを記述しようとしています。フォルダー名はどこに記載すればよいですか?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi

1
そして、あなたはそれをソートする場合:serverfault.com/questions/62411/...
cregox


これは人気のある質問です-初心者がこの質問の答えに遭遇し、一体duが何であるか、そして誰もがこれらのすべてのコマンドをどのように知っているかについて詳しく知りたい場合:man du端末に入力して、マニュアルでduコマンドを検索できます。これにより、表示可能な出力が表示され、使用を提案している回答である-h、-c、-s、-b、-B、-apparent-sizeなどのすべてのフラグが要約されます。次に、du特定のユースケースでどのように使用するのが最適かを自分で決めることができます。
Josh Desmond

回答:


609

できるよ:

du -h your_directory

これにより、ターゲットディレクトリのサイズがわかります。

簡単な出力が必要な場合du -hcs your_directoryは便利です。


15
スクリプトの値を取得しようとしているときに、人間が読める数値は必要ありません。
水田

4
ディレクトリパスを指定しない場合、デフォルトで現在の作業ディレクトリになります。そうdu -hs== du -hs .
ラズ、

8
また、チェックアウト:du | sort -nディレクトリをサイズでソートします
optimiertes

3
du -hcs dir_name/*サブフォルダーを含む
optimiertes

du -h <dir> | 尾-1?
Alexander Mills 2016

143

サブフォルダではなくフォルダサイズだけを表示したい場合は、次のように使用できます。

du -hs /path/to/directory

更新:

du使用済みのディスク容量が表示されていることを知っておく必要があります。ファイルサイズではありません。

--apparent-size実際のファイルサイズの合計を見たい場合に使用できます。

--apparent-size
      print  apparent  sizes,  rather  than  disk  usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
      files, internal fragmentation, indirect blocks, and the like

そしてもちろん-h、スクリプト内に(人が読める)オプションは必要ありません。

代わりに、-bスクリプト内での比較を容易にするために使用できます。

ただし、それ自体が-b適用さ--apparent-sizeれることに注意してください。そして、それはあなたが必要とするものではないかもしれません。

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

私は思うので、あなたが使用する必要があります--block-size-B

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi

数年前のことですが、条件付き正規表現とBASH_REMATCHの目的を少し説明していただけませんか。(またはこれらの変数/コマンド/フォーマットの使用に関するいくつかのリンクを提供するため)私はコードが変数内のファイルのサイズを取得し、それを10 GBと直接比較することを期待していましたが、他のことは何ですか?
Nordico、2016年

2
@Nordicoうん。正規表現とBASH_REMATCHは必要なかったので、答えを更新しました。
Taxellool

29

要約(-s)とバイト(-b)を使用します。を使用して、要約の最初のフィールドを切り取ることができcutます。すべてを一緒に入れて:

CHECK=$(du -sb /data/sflow_log | cut -f1)

1
シェルスクリプトは初めてです。duコマンドの出力には、ディレクトリ名が含まれます。ナンバーパートしか取れませんでした。あなたの答えの「カット」は謎を解きました!
simpleDev 2018

26

ディレクトリのサイズを取得するためだけに、これ以上はありません。

du --max-depth=0 ./directory

出力は次のようになります

5234232       ./directory

5
--max-depth出力を効果的に制御するには非常に便利です!たとえば、ディレクトリ内で何が起こっているかの良い概念を取得しますdu -h --max-depth=1
matanster


12

フォルダーの合計サイズをおそらくMBまたはGB形式で表示したい場合は、以下のスクリプトを試してください

$du -s --block-size=M /path/to/your/directory/

1
OS Xでは、フラグは-g1Gバイトと-m1Mバイトのカウント用です。経由man du
Sgnl 2017

5
# 10GB
SIZE="10"


# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"

if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
        echo "Folder is bigger than $SIZE GB"
else
        echo "Folder is smaller than $SIZE GB"
fi

4

役立つ場合は、.bashrcまたはでエイリアスを作成することもできます.bash_profile

function dsize()
{
    dir=$(pwd)
    if [ "$1" != "" ]; then
            dir=$1
    fi
    echo $(du -hs $dir)
}

これは、現在のディレクトリまたは引数として渡したディレクトリのサイズを出力します。


これは素晴らしい答えです
d8aninja
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.