今回も前回に続きfindコマンドを使ってファイルサイズを指定して検索します。最近ではSSDの容量も大きくなりましたが、映像ファイルなど大きなサイズのファイルによってディスク容量が圧迫されてしまうことがあります。そんな時、特定サイズより大きいファイルだけを検索できれば便利です。また、サイズが0バイトなど中身のない無用なファイルを検索して削除することもできれば便利です。今回もいつものようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
ディスク容量・ディレクトリ容量の確認
ファイルサイズを調べる前に接続されているディスク全体の状況・容量とディレクトリ容量を把握しておきましょう。今回はWindowsのコマンドから調べる方法も少し説明します。
UNIX系OSでディスク全体の容量を調べるにはdfコマンドを使います。オプションなしで、そのまま入力すると以下のように出力されます。
Macの場合はかなり多くのディスク情報が表示されています。ネットワーク上に接続したボリュームなども出力されてしまいますが、ローカルディスクだけをリストアップするにはlオプションを指定します。
dfコマンドは接続されているディスクの容量は確認できますが、特定のディレクトリの容量を調べる事はできません。特定のディレクトリ内にあるファイル・ディレクトリを含めた容量を調べたい場所はduコマンドを使います。
サンプルで用意したデスクトップ上にあるsampleディレクトリの容量を調べてみましょう。ここではサンプルファイルとディレクトリを以下のように用意してあります。
容量を調べるファイルやディレクトリを用意できたら以下のようにコマンドを入力してください。
du -sh ~/Desktop/sample/*
上記のようにhオプションをつけるとファイルサイズ・ディレクトリサイズに合わせて単位が付加されますが、1K単位で表示したい場合はkオプションを付加します。
du -sk ~/Desktop/sample/*
調べるディレクトリパスを指定しないとカレントディレクトリ内にあるファイル・ディレクトリの合計容量を表示します。以下のようにするとデスクトップ上にあるsampleディレクトリ内のファイル容量、ディレクトリ容量では合計容量が表示されます。
cd ~/Desktop/sample
du -sh ./*
df,duコマンドには他にもいろいろなオプションがあります。オプションは環境によって異なるのでmanコマンドを使って、どのようなオプションがあるか確認しておくとよいでしょう。
Windowsの場合
Windowsでコマンドラインからディスク容量を調べるにはfsutilコマンドを使います。ディスク容量は以下のようにパラメーターを指定します。最後のc:は容量を調べるドライブレターです。
fsutil volume diskfree c:
fsutilコマンドは古くからあるのでWindows XPでも利用できます。すでにサポートが終わっているOSですが、せっかくなのでWindows XPとWindows 10でのfsutilコマンドを実行した結果を載せておきます。なお、fsutilとだけ入力すると使えるオプションが表示されます。
PowerShellではGet-PSDrive, Get-Volumeなどが用意されています。PowerShellはWindows以外にも提供されていますが、すべてのコマンドを共通して利用できるわけではないのでディスク情報を取得できるコマンドは環境によって異なります。PowerShellについては、また別の機会にでも説明したいと思います。
あとWindowsではwmicコマンドがありますが、現在では非推奨になっています。
任意のサイズのファイルを作成
ここで任意のサイズのファイルを作成する方法について説明しておきます。findコマンドでファイルを検索する場合に該当するサイズのファイルがないと動作を確認できないためです。該当するサイズのファイルを用意できる場合には、以下の説明は読み飛ばしてもらっても構いません。任意のサイズのファイルを生成する用途は滅多にないからです。
Linuxでは使用するファイルシステムによりますが、fallocateコマンドが使える場合があります。この場合、以下のようにするとサイズが1バイトのファイルを作成することができます。
fallocate -l 1 0.txt
fallocateなら任意のファイルサイズのファイルを簡単に作成できます。なお、上記のコマンドで0バイトを指定するとエラーになりますので、空っぽのファイルを作成する場合はtouchコマンドの方がよいかもしれません。
fallocateコマンドで1Mbyteのファイルを作成するには以下のようになります。
fallocate -l 1M big.txt
macOSの場合はmkfileコマンドが用意されています。以下のようにすると1バイトのファイルが作成されます。
mkfile 1 0.txt
mkfile 0 0.txtとすれば0バイトの空ファイルが作成されます。 mkfile コマンドで1Mbyteのファイルを作成するには以下のように指定します。1mを1gにすると1Gバイトのファイルが作成されます。マシンパワーによってはちょっと生成までに時間がかかる場合もあります。数値と単位を間違えないように注意してください。なお、単位は大文字でも小文字でも構いません。
mkfile 1m big.txt
いずれのコマンドも使えない環境の場合、大昔からあるddコマンドを使う方法もあります。ddコマンドはほとんどのUNIX環境で使えます。興味があれば調べてみてください。
Windowsで任意のサイズのgファイルを作成する場合はfsutilコマンドを使います。以下のようにするとカレントディレクトリに0バイトのファイルが作成されます。
fsutil file createNew 0.txt 0
1Mバイトのファイルを作成する場合は以下のようになります。
fsutil file createNew big.txt 1048576
サイズを指定してファイルを検索
SSDやHDDが大容量になったとは言え、容量を気にせずに使っていると、いつの間にか残り容量が少なくなってる事があります。また、中身のない空っぽのファイル、ダミーファイルがあちこちに作成されてしまっている事もあります。
そんな時にfindコマンドを利用できます。ファイルサイズを指定する場合は-sizeを使います。-sizeの後に調べるファイルサイズを指定します。サイズを示す数値の後には単位を示す英文字を指定します。1024cとすると1024バイトを示します。1kとすると1Kバイトを示すことになります。1メガバイトなら1Mバイト、1ギガバイトなら1Gです。大文字小文字は判別されるので注意してください。
指定できるサイズの単位をまとめると以下のようになります。
c バイト
k キロバイト
M メガバイト
G ギガバイト
サイズがゼロのファイルを検索するには以下のように指定します。
find . -size 0c
ちなみにファイルサイズかゼロの場合は専用のオプションが用意されています。以下のように-emptyを指定します。
find . -empty
ファイルのサイズが明確に分かっていればバイト数を指定して検索するのもよいでしょう。以下の例では1バイトのファイルと6バイトのファイルを検索しています。
find . -size 1c
find . -size 6c
大きいファイルサイズを検索
ファイルサイズを指定して検索する場合、-sizeオプションの後に+記号付きでファイルサイズを示す値(バイト数)を指定します。以下のように指定すると1024バイト(1Kバイト)以上のファイルが検索されます。大きなファイルがディスク容量を圧迫していないか調べる場合に便利です。
find . -size +1024c
より大きなファイルサイズな場合は数値のあとに単位をつけることもできます。これは、前に説明した単位と同じです。以下のようにするとカレントディレクトリ内にある1Mバイト以上のファイルが検索されます。
find . -size +1M
該当するファイルがない場合は何も表示されません。そこで、前に説明したfallocate, mkfileコマンドを使って1Mバイトより大きいサイズのファイルを作成してから実行してみます。
Linuxの場合
fallocate -l 2M big.txt
macOSの場合
mkfile 2m big.txt
ちなみにカレントディレクトリではなく、システム全体で1Gバイト以上のファイルがあるか調べたい場合は以下のように検索基準となるファイルパスをルートディレクトリを示す/にします。ただし、検索できるディレクトリやファイルはアクセスできる権限がないといけません。
find / -size +1G
また、エラー表示が多くて困る場合はリダイレクトを使ってエラーを捨ててしまうこともできます。
find / -size +1G 2>/dev/null
あまりシステム全体を検索してチェックすることは少ないでしょうから、多くは自分のホームディレクトリ以下を指定するといったところでしょう。ただし、環境によっては自分のホームディレクトリ内であっても特定のディレクトリへのアクセスを許可していない場合は検索できません。macOSの場合、OSのバージョンによってはダイアログが表示されユーザーが許可しないと検索できないようになっています。
以下のようにリダイレクトを使って検索結果をファイルに保存しておけば、どのファイルがディスク容量を圧迫してるか確認が楽になります。以下の例では自分のホームフォルダ内での検索結果をカレントディレクトリにlist.txtという名前で保存します。
エラーは表示
find ~/ -size +1G >./list.txt
エラーは表示しない
find ~/ -size +1G 2>/dev/null >./list.txt
ファイル数が多い場合、検索に時間がかかってしまう事があります。あらかじめduコマンドで、どのディレクトリがディスク容量を使っているかを調べておいてからfindコマンドで検索するとよいかもしれません。
著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。