rm -rf
作業していた大きなディレクトリを誤って起動しました。このディレクトリには、特にdata
数千のテキストファイルを含む多くのサブディレクトリを含むディレクトリが含まれています。本質的には次のようになります。
$ tree data
data
├── collection0
│ ├── input
│ │ ├── file0.txt
│ │ ├── file1.txt
│ │ ├── ...
│ │ └── file9999.txt
│ └── output
│ ├── file0.txt
│ ├── file1.txt
│ ├── ...
│ └── file9999.txt
├── ...
└── collection99
├── input
│ ├── file0.txt
│ ├── file1.txt
│ ├── ...
│ └── file9999.txt
└── output
├── file0.txt
├── file1.txt
├── ...
└── file9999.txt
かなり早くプロセスを中断することができましたがrm -rf
、もちろん他のサブディレクトリの多くのファイルが実行される0.5秒ほど削除されました。
私の質問は、この間に特定のサブディレクトリでファイルが失われたかどうかを100%確実にする方法はありますか?Modify
ファイルが消えたディレクトリの時間がファイルが削除された時間に更新されたようですが、この方法を利用して考えるデータサブディレクトリのファイルは削除されませんでした(2021-09-08がイベント日付であると仮定rm -rf
)。
$ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \;
data/collection0/input 2021-08-28 05:45:49.624228368 -0400
data/collection0/output 2021-08-28 05:45:49.624228368 -0400
...
data/collection99/input 2021-08-29 04:55:38.772912003 -0400
data/collection99/output 2021-08-29 04:55:38.772912003 -0400
$ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \; | grep 2021-09-08
$
これが信頼できる方法ですか?
答え1
Linux のマニュアルページにはstat(2)
次のように記載されています。
このフィールドは、および(0バイト以上)などの
st_mtime
ファイル変更によって変更されます。mknod(2)
truncate(2)
utime(2)
write(2)
また、st_mtime
そのディレクトリにファイルを作成または削除すると、ディレクトリが変更されます。st_mtime
所有者、グループ、ハードリンクの数、またはモードが変更されても、このフィールドは変更されません。このフィールドは、
st_ctime
inode情報(所有者、グループ、リンク数、モードなど)を作成または設定することによって変更されます。
rm
はい。すべてのディレクトリをタッチすると、更新された修正時間を確認できます。もちろん、後で手動リセットがないと仮定していますが、この場合変化タイムスタンプ(ctime)を更新する必要があります。まあ、マンページのテキストを正しく理解すると、mtimeが更新されるとctimeも更新されるので、それだけを見るだけで十分です。
また、否定を証明するにはmtimeのみを使用できます。タイムスタンプが更新されると、ファイルの削除、他のファイルの作成、またはタイムスタンプの手動変更によって更新が発生したかどうかを知る方法はありません。