2026/03/22
また聞かれそうなのでメモで残す。
ディレクトリやファイルの日付は種類があって
がある。
自分が処理する日時がどれなのかを認識しておかないと正しい結果を得られない。
参照日時は環境によっては更新が入らず使えない場合がある。
更新日時は、
になる。作成日時と混同しないように。
消す対象を正しく選択出来ているか試す。※事故りたくないよな?
find /path/to/root -type d -mindepth 1 ! -newermt "2026-03-01 12:00:00" -ls
この例は、findコマンドでディレクトリ /path/to/root に存在するディレクトリ直下のサブディレクトリで更新日時が2026-03-01 12:00:00以前のものを一覧表示する。
| # | 引数 | 説明 |
|---|---|---|
| 1 | /path/to/root | ディレクトリ検索開始パス |
| 2 | -type d | 選択対象をディレクトリに指定 |
| 3 | -mindepth 1 | #1の直下が対象の意(0は#1自身を含む。1は#1自身を含めない) |
| 4 | ! | 次のオプションの意を反転する(#5の意の反転) |
| 5 | -newermt “2026-03-01 12:00:00” | 更新日時が 2026-03-01 12:00:00 より新しい ※ mtime > 2026-03-01 12:00:00 |
| 6 | -ls | 選択対象を ls -dils 相当の書式で表示 |
#2はディレクトリを対象とする指定。-type f ならファイルの意になる。
#3は#1を処理対象にしたくないから。
#5の意は 「mtime > 2026-03-01 12:00:00」の指定で、#4は#5の反転を意味しており結果「mtime ≦ 2026-03-01 12:00:00」の指定になる。日時を明示するならこの方法しかない。
#6の書式以外の出力は「-printf '%TY-%Tm-%Td %p\n'」のような書式指定オプションを適用する。
消す対象を正しく選択出来ているなら削除を実施する。
find /path/to/root -type d -mindepth 1 ! -newermt "2026-03-01 12:00:00" -exec rm -rf {} +
この例は、findコマンドでディレクトリ /path/to/root に存在するディレクトリ直下のサブディレクトリで更新日時が2026-03-01 12:00:00以前のものを削除する。
| # | 引数 | 説明 |
|---|---|---|
| 1 | /path/to/root | ディレクトリ検索開始パス |
| 2 | -type d | 選択対象をディレクトリに指定 |
| 3 | -mindepth 1 | #1の直下が対象の意(0は#1自身を含む。1は#1自身を含めない) |
| 4 | ! | 次のオプションの意を反転する(#5の意の反転) |
| 5 | -newermt “2026-03-01 12:00:00” | 更新日時が 2026-03-01 12:00:00 より新しい ※ mtime > 2026-03-01 12:00:00 |
| 6 | -exec rm -rf {} + | 選択対象を削除する |
#6は「-delete」でもよさそうだがディレクトリが空じゃないと消せないので。オールドスタイルな指定になる。