web-dev-qa-db-ja.com

大きなファイル/ディレクトリを見つけてスペースを削除して解放するコマンドラインの方法は何ですか?

ドライブ上の最大のファイルを表示する一連のコマンドを探しています。

199
Ryan Detzel

大きなファイルを見つける必要がある場合は、find-sizeオプションとともに使用できます。次のコマンドは、10MiBより大きいすべてのファイルをリストします( 10MBと混同しないでください ):

find / -size +10M -ls

特定のサイズのファイルを検索する場合は、「より小さいサイズ」検索と組み合わせて使用​​できます。次のコマンドは、10MiB〜12MiBのファイルを検索します。

find / -size +10M -size -12M -ls

apt-cache search 'disk usage'は、ディスク使用量分析に使用できるプログラムをいくつかリストします。非常に有望に見えるアプリケーションの1つはgt5です。

パッケージの説明から:

年が経ち、ディスクはどんどん大きくなりましたが、この信じられないほど巨大なハードディスクの時代でさえ、スペースは時間とともに消えていくようです。この小さくて効果的なプログラムは、デフォルトのdu(1)よりも便利なリストを提供します。前回の実行以降に発生したことを表示し、dirサイズと合計パーセンテージを表示します。テキストベースのブラウザ(リンク、elink、lynxなど)でカーソルキーを使用して、ディレクトリに移動したり、ディレクトリに移動したりすることができます。

Screenshot of gt5

gt5 の「関連パッケージ」セクションで、ncduを見つけました。パッケージの説明から:

Ncduは、ncursesベースのduビューアーです。有名なduユーティリティを使用して、高速で使いやすいインターフェイスを提供します。ディレクトリを参照し、ncursesライブラリでディスク使用率を表示することができます。

Screenshot of ncdu

270
Lekensteyn

dusortの組み合わせを使用します。

Sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

それはrinse and repeatの場合です。大きすぎると思われるサブディレクトリをターゲットにし、それらのコマンドを実行して、問題の原因を見つけます。

注:du-xフラグを使用して、物事を1つのファイルシステムに制限します(SSDとRAID5の間にクロスマウントされた物の非常に複雑な配置があります)。

注2:2>/dev/nullは、エラーメッセージを忘却にリダイレクトします。彼らがあなたに迷惑をかけないなら、それは義務ではありません。

32
Oli

私のお気に入りのソリューションでは、これらの良い回答のいくつかを組み合わせて使用​​しています。

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du引数:

  • -aは「すべて」のファイルとディレクトリを表します。ディレクトリだけはオフのままにします
  • -BMは、メガバイト(M)ブロックサイズ(B)でサイズを出力します
  • 2>/dev/null-「許可が拒否されました」エラーメッセージを除外します(@Oliに感謝)

sort引数:

  • -nは「数値」
  • -rは「逆」(最大から最小)

head引数:

  • -n 50上位50件の結果。
  • 小さい数値を使用する場合はmoreを省略します

注:アカウントにアクセス権限がないディレクトリを含めるには、Sudoをプレフィックスとして付けます。

/ varの上位10個の最大のファイルとディレクトリを示す例(総計を含む)。

cd /var
Sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/Apache2
587M    ./log/Apache2/ssl_access.log
273M    ./cache
25
Dan King

現在のフォルダー内の上位20個のディレクトリを(再帰的に)表示するには、次の1行を使用します。

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

または(よりUnix指向):

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

-hはGNU sortでのみ利用可能であることに注意してください。OSX/ BSDで正しく動作させるには、coreutilsからインストールする必要があります。次に、そのフォルダーを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'
10
kenorb

qbiの答えは正しいですが、各アイテムに対して新しいlsプロセスを開始するため、多くのファイルがある場合は非常に遅くなります。

子プロセスを生成せずにfindを使用するより高速なバージョンは、printfを使用してサイズをバイト(%s)およびパス(%p)で出力します

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries

10
kon

これは、findに最適なアプリケーションのようです。

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

このコマンドは、ディレクトリ$DIRECTORY内のすべてのファイルを検索し、それらに対してls -sを実行します。最後のコマンドは、ファイルに割り当てられたサイズとファイル名を出力します。結果は数値順にソートされ、最後の5つのエントリが表示されます。その結果、$DIRETORYまたは任意のサブディレクトリに最大5つのファイルが表示されます。 tail -n 1と入力すると、最大のファイルのみが表示されます。

さらに、findを使用してさまざまな操作を行えます。たとえば、n days(-ctime -n)よりも新しいファイルや、特別なユーザー(-user johndoe)に属するファイルを検索できます。

8
qbi

サーバーの空き容量を増やす必要がある場合は、このコマンドを使用します。すべてのファイルが50 MBより大きく、「du -h」がファイルのリストを改善し、パイプがリストをファイルサイズで数値順にソートした後に「sort -n」を見つけます。

find / -size +50M -type f -exec du -h {} \; | sort -n
5
zorbon.cz

たとえば、すべてのGBファイルを見つけるには、duとgrepを使用しますが、ここで説明した他の方法も同様に素晴らしいようです。

du -h -a /dir | grep "[0-9]G\b"  

また、duにある--exceptオプションを使用することもできます。

1
dermen

Baobabを試してください。ファイルとフォルダの概要がグラフィカルに表示されます。実際の領域がどこにあるかを確認し、ワンクリックで削除できます https://help.ubuntu.com/community/Baobab

1
Oliver Hoffmann

コマンドを使用して、ディレクトリをスキップしながら最大のファイルを表示できます。

Sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

100MiBより大きいすべてのファイルを見つけるには(これは100MBではありません。混乱した場合は here を参照してください):

find / -size +100M -ls

以下のコマンドは、フォルダー$DIRECTORY内の最大の5つのファイルを表示します。

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

USING du:duを使用する以下のコマンドは、ホーム作業フォルダー内の20の最大サイズのディレクトリを表示します。

Sudo du -a /home | sort -n -r | head -n 20

ここで、サブフォルダーを含む最大のディレクトリ/ファイルを表示するには、次を実行します。

du -Sh | sort -rh | head -n 10

lsを使用:

/ binディレクトリ内の上位5つのファイルをリストするには、次のコマンドを発行します。

ls -lSh /bin | head -5

Disk Usage Analyzerまたは Baobao を使用して、たとえば here のように使用することもできます。

0
Zezo

ファイルをサイズで並べ替えることもできます。

find . -type f -exec du -h {} \; | sort -k1 -h

ファイルのみを検索し、すべてのファイルに対してdu -hを実行します。これは、ファイルのサイズを示します。最後に、find/duの出力を最初の列(人間が読み取れる形式)に従ってソートします。

最後に印刷されたファイルが最大です。

0
Peregring-lk