Linuxでディレクトリの変更日時を確認する方法では、statのformatで複数時刻とinodeを取得し、必要なら直下entryのmtimeを別一覧にする。directory mtimeは直下entryの作成・削除・rename等で変わるが、既存子ファイル内容の更新だけではdirectory mtimeが変わらない場合がある。ctimeはmetadata変更、birthは未対応もある。この記事はdirectoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れるを判断軸にして、記事固有のコード、合否、停止条件、復元を順序立てて説明します。
子ファイルの最終更新一覧ではなく、directory entry table自身の時刻を中心に読む。完了は「どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる」です。結果が空なら「birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける」として調べ、エラーを0件へ置き換えません。
directory mtimeが変わる操作
statのformatで複数時刻とinodeを取得し、必要なら直下entryのmtimeを別一覧にする。ディレクトリmtimeの確認では、単にコマンドが終了したことではなく「どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる」を完了条件にします。子ファイルの最終更新一覧ではなく、directory entry table自身の時刻を中心に読む。
directory mtimeが変わる操作に入る前に、対象、実行場所、権限、入力の由来を確認します。birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける。判定不能を成功へ丸めません。
statでmtime・ctime・birthを分ける
statでmtime・ctime・birthを分けるでは「directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる」という粒度で対象を特定します。directory mtimeは直下entryの作成・削除・rename等で変わるが、既存子ファイル内容の更新だけではdirectory mtimeが変わらない場合がある。ctimeはmetadata変更、birthは未対応もある。表示名や先頭候補だけを採用しません。
ディレクトリmtimeの確認の対象が複数なら、候補数と除外理由を残します。ディレクトリmtimeの確認では実行ユーザー、OS・製品版、locale、カレントディレクトリも結果の解釈へ影響するため同時に記録します。
直下entryの時刻も並べる
直下entryの時刻も並べるは変更や出力生成より先に行う観測です。directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れるを含む形で現状を保存し、後段のコードが同じ対象へ向くか確認します。
dir='./workspace'
stat --printf='mtime=%y\nctime=%z\nbirth=%w\nname=%n\n' -- "$dir"
find "$dir" -maxdepth 1 -mindepth 1 -printf='%T@ %TY-%Tm-%Td %TH:%TM:%TS %f\n' | sort -n | tail -n 10
directory mtimeは直下entryの作成・削除・rename等で変わるが、既存子ファイル内容の更新だけではdirectory mtimeが変わらない場合がある。ctimeはmetadata変更、birthは未対応もある。ディレクトリmtimeの確認では取得不能、対象なし、値が空という三状態を分け、stderrや終了コードを捨てません。
子ファイル内容変更との違い
子ファイル内容変更との違いではstatのformatで複数時刻とinodeを取得し、必要なら直下entryのmtimeを別一覧にする。ディレクトリmtimeの確認のサンプルにあるパス、セル、ユーザー、時刻は検証用なので、直前に確認した承認値へ置き換えます。
stat --printf='%i %y %z %w %n\n' -- "$dir"
printf 'children='; find "$dir" -maxdepth 1 -mindepth 1 -printf=. | wc -c
mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない。ディレクトリmtimeの確認で変更が発生する場合は、新規出力、no-clobber、WhatIf、下書き表示など利用可能な安全機構を先に使います。
timezoneと小数秒を保持
timezoneと小数秒を保持では入力と出力を別々に再取得します。ディレクトリmtimeの確認の合格は、どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できることです。件数だけでなく識別値と内容も照合します。
dir='./workspace'
now_epoch=$(date +%s)
mtime_epoch=$(stat --format='%Y' -- "$dir")
printf 'now_epoch=%s\nmtime_epoch=%s\nage_seconds=%s\n' "$now_epoch" "$mtime_epoch" "$((now_epoch-mtime_epoch))"
birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける。ディレクトリmtimeの確認の結果が期待と違えば追加変更を重ねず、入力、対象範囲、locale・時刻、権限、製品仕様の順に戻って調べます。
birthが-になるfilesystem
mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない。birthが-になるfilesystemに当てはまるときは中止理由、対象識別子、終了コードまたはErr.Number、直前に成功した段階を保存します。
birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける。ディレクトリmtimeの確認の再試行は原因を直し、同じ入力と対象を再確認してから行います。警告抑止や強制上書きで通しません。
監視ではinodeも保存
読み取りのみ。時刻を戻すtouch操作は監査証跡を変えるためこの記事では行わない。復元にも「directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる」を用い、類似名の別対象へ処理しません。
- ディレクトリmtimeの確認の開始前状態
- 採用対象: directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる
- 復元後の確認: どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる
- 復元を止める条件: mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない
変更日時だけで作業者を断定しない
監視ではinode交換とrenameを検知し、パス文字列だけで同じdirectoryとみなさない。ディレクトリmtimeの確認を反復するときは、正常、差分なし、対象なし、要承認、失敗を別の状態として記録します。
| 変更日時だけで作業者を断定しないの主キー | directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる |
| 採用条件 | どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる |
| 空結果 | birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける |
| 中止条件 | mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない |
directory mtimeが変わる操作から証跡化する直下entryの時刻も並べる
ディレクトリmtimeの確認の証跡は「directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる」を主キーにします。directory mtimeが変わる操作で確認した値と、実行直前・実行直後の値を同じ作業番号に保存し、表示名が似ている別対象や前回の結果を混ぜません。
statでmtime・ctime・birthを分けるで空結果を判定する子ファイル内容変更との違い
ディレクトリmtimeの確認の空結果は「birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける」として扱います。statでmtime・ctime・birthを分けるで入力自体が存在するか、権限で見えていないか、条件に一致しないだけかを分け、0件という表示だけで成功・失敗を決めません。
変更日時だけで作業者を断定しないから復旧可否を測るdirectory mtimeが変わる操作
ディレクトリmtimeの確認の復旧判断では「読み取りのみ。時刻を戻すtouch操作は監査証跡を変えるためこの記事では行わない」を採用します。変更日時だけで作業者を断定しないを再確認し、復旧後に「どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる」へ戻ったかを別の読み取り処理で測定します。
ディレクトリmtimeの確認の事前確認では、directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れるを画面表示や標準出力だけで済ませず、実行日時と一緒に作業記録へ写します。directory mtimeは直下entryの作成・削除・rename等で変わるが、既存子ファイル内容の更新だけではdirectory mtimeが変わらない場合がある。ctimeはmetadata変更、birthは未対応もあるという仕様があるため、似た名前の別対象、前回実行時の値、キャッシュされた表示を今回の対象と取り違えないことが重要です。
ディレクトリmtimeの確認のコードを実行した直後は、まず終了状態を保存し、その後に別の読み取り処理で「どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる」を確認します。ディレクトリmtimeの確認では同じコードの表示だけを合否判定に使うと部分成功や遅延反映を見逃すため、識別値、件数、内容の三点を照合します。
ディレクトリmtimeの確認で結果が得られない場合は、birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける。ディレクトリmtimeの確認ではこの状態と、権限拒否、入力形式の不一致、接続先や時刻の違いを一緒にしません。ディレクトリmtimeの確認の対象候補数、除外された候補、最後に成功した確認処理を残すと、再試行で同じ失敗を重ねずに済みます。
ディレクトリmtimeの確認を元へ戻す必要があるときは、読み取りのみ。時刻を戻すtouch操作は監査証跡を変えるためこの記事では行わない。ディレクトリmtimeの確認の復元前にも変更後の識別値を再取得し、別担当者の更新が入っていないか確認します。ディレクトリmtimeの確認の復元結果も通常処理と同じ完了条件で測り、戻したつもりという報告だけで閉じません。
ディレクトリmtimeの確認を引き継ぐ記録には、監視ではinode交換とrenameを検知し、パス文字列だけで同じdirectoryとみなさない。特に「mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない」に該当した場合は、実行を止めたこと自体を正しい結果として扱います。ディレクトリmtimeの確認の次回担当者が承認範囲と未処理対象を区別できるよう、作業番号と対象識別子を対応付けます。
ディレクトリmtimeの確認の作業記録には、開始前の対象候補、採用した識別値、実行したコード、終了後の実測、除外理由を同じ作業番号で保存します。「directoryのdevice、inode、mtime、ctime、birth、直下entry件数を同じ観測へ入れる」を省くと別対象との比較になり得るため、日時、実行場所、製品版と一緒に残します。
Linuxでディレクトリの変更日時を確認する方法を定期運用へ組み込む場合も初回は対話的に確認します。正常は「どの時刻を報告したか、timezone、小数秒、inodeを示し、直下変更か子内容変更かを区別できる」、空結果は「birthが-でも故障とは限らず、filesystemの未対応として扱う。stat失敗とは分ける」、停止は「mtimeだけで変更内容や実行ユーザーを断定しない。find結果の文字列sortで時系列を誤らない」として報告し、次の担当者が同じ条件で追試できるようにします。
公式情報・参考資料
ディレクトリmtimeの確認のコマンド、API、対応範囲は次の公式一次資料で確認しました。確認日は2026年7月17日です。ディレクトリmtimeの確認の実行環境にあるman、–help、VBA Object Browser、Get-Helpも併用してください。

コメント