stat -cオプションの使い方を徹底解説!Linuxで出力フォーマットを自由に指定しよう
生徒
「statコマンドで表示される情報って多すぎて見づらいです…。必要な部分だけ表示できませんか?」
先生
「そのときに便利なのが、-cオプションです!出力内容を好きな形式で指定できるんですよ。」
生徒
「えっ、そんなことができるんですか!?使い方を教えてください!」
先生
「それでは、stat -cの基本から応用まで一緒に見ていきましょう!」
1. statコマンドとは?
stat(スタット)コマンドは、Linuxでファイルやディレクトリの詳細情報を表示するための基本コマンドです。例えば、ファイルのサイズ、最終更新日時、パーミッション(アクセス権)、オーナー、グループ、iノード番号など、様々な属性を確認することができます。
通常のstatコマンドは、一度にたくさんの情報を表示してくれますが、必要な項目だけ見たいときは見づらいと感じることもあるでしょう。
2. -cオプションで出力フォーマットを指定しよう
-c(または--format)オプションを使うことで、表示したい情報だけをカスタマイズして出力することができます。これは「書式指定子(フォーマット指定)」と呼ばれる記号を使って出力形式を定義する仕組みです。
たとえば、ファイル名とファイルサイズだけを表示したいときは次のように書きます。
stat -c "%n %s" test.txt
test.txt 1024
ここで使われている%nは「ファイル名」、%sは「ファイルサイズ(バイト単位)」を意味します。
3. よく使うフォーマット指定子まとめ
ここでは、初心者が覚えておくと便利な代表的な書式指定子を紹介します。
%n:ファイル名%s:ファイルサイズ(バイト)%F:ファイルの種類(regular file、directoryなど)%a:アクセス権(8進数)%A:アクセス権(記号表記)%U:所有者(ユーザー名)%G:所有グループ%y:最終更新時刻
たとえば、「ファイル名、ファイルの種類、アクセス権(記号)、所有者、サイズ」を一行で表示したい場合は次のように書きます。
stat -c "%n %F %A %U %s" test.txt
test.txt regular file -rw-r--r-- user 1024
4. 改行やスペースの調整も自由自在
-cオプションの書式は文字列なので、途中にスペースや改行記号(\n)を入れることで、出力の見た目を自由に調整できます。
stat -c "ファイル名: %n\nサイズ: %s バイト\n更新日時: %y" test.txt
ファイル名: test.txt
サイズ: 1024 バイト
更新日時: 2024-09-15 10:15:30.123456789 +0900
このように、日本語を混ぜた出力にすることで、スクリプトやレポート作成時にも便利です。
5. 複数ファイルにも使える
stat -cは、複数のファイルに対して一括で情報を取得することもできます。
stat -c "%n,%s" *.txt
file1.txt,2048
file2.txt,1024
file3.txt,512
このように、CSV形式で出力すれば、Excelなどに貼り付けるのも簡単です。
6. statとlsの違いを知っておこう
「ファイルの詳細を確認する」といえばls -lを思い浮かべる人も多いかもしれません。たしかにlsコマンドも便利ですが、以下のような違いがあります。
lsは一覧表示が得意。内容は固定。statは詳細で正確な情報が見られる。-cでフォーマット自由自在。
つまり、「一覧でざっくり確認」はls、「正確に必要な情報をピンポイントで取得」はstatが得意ということです。
7. スクリプトで使うときにも便利
シェルスクリプトなどでファイルのサイズを取得して条件分岐するような処理を書くとき、stat -cは非常に有用です。たとえば次のようなスクリプトが考えられます。
size=$(stat -c "%s" test.txt)
if [ "$size" -gt 1000 ]; then
echo "ファイルサイズが1000バイトを超えています"
fi
stat -cで得られた情報は変数として扱えるため、処理の自動化にもぴったりです。
8. 書式に関する注意点
フォーマット内にスペースや記号を含めたい場合は、必ず全体をダブルクオーテーション(")で囲みましょう。また、複数のファイルを対象にするときはワイルドカード(*.txt)を使うと便利です。
なお、%の後に無効な文字を使うとエラーになりますので注意してください。