「最近編集したファイルを探したい」 「一番古いログファイルを削除したい」 「昨日作成したファイルだけ見たい」
こんな時、ファイル名順じゃなくて日付順で表示できたら便利ですよね?
実は、lsコマンドには日付順ソートの機能が豊富に用意されているんです。 でも、オプションが多くて覚えきれない…という人も多いはず。
この記事を読めば、日付順表示のすべてのパターンをマスターできます! さらに、実務で使える便利なテクニックも満載ですよ。
基本編:最もよく使う日付順コマンド

まずはこれだけ!基本の3つ
1. 新しい順に表示(最近更新されたファイルが上)
ls -lt
2. 古い順に表示(古いファイルが上)
ls -lrt
3. 詳細情報なしで日付順(ファイル名だけ)
ls -t
実行例:
$ ls -lt
total 48
-rw-r--r-- 1 user user 2048 12月 15 14:30 report_2024.pdf
-rw-r--r-- 1 user user 1024 12月 15 09:15 todo.txt
-rw-r--r-- 1 user user 512 12月 14 18:45 notes.md
drwxr-xr-x 2 user user 4096 12月 13 11:20 images/
-rw-r--r-- 1 user user 256 12月 10 08:00 old_file.txt
最新のファイルが一番上に来るので、「さっき作ったファイルはどれだっけ?」がすぐ分かります!
オプションの意味を理解しよう
オプション | 意味 | 覚え方 |
---|---|---|
-l | long format(詳細表示) | Long(長い) |
-t | time(時間順) | Time(時間) |
-r | reverse(逆順) | Reverse(逆) |
この3つを組み合わせるだけで、基本的な日付順表示はOK!
3種類の「時刻」を使い分ける
Linuxファイルの3つの時刻
実は、Linuxのファイルには3種類の時刻が記録されています!
1. mtime(修正時刻)- デフォルト
- ファイルの内容が変更された時刻
- 普通の「更新日時」
2. atime(アクセス時刻)
- ファイルが最後に読まれた時刻
- catやlessで見ただけでも更新
3. ctime(変更時刻)
- ファイルの属性が変更された時刻
- 権限変更、所有者変更など
それぞれの時刻で並べ替える
修正時刻順(デフォルト):
ls -lt
# または明示的に
ls -lt --time=mtime
アクセス時刻順:
ls -ltu
# または
ls -lt --time=atime
変更時刻順:
ls -ltc
# または
ls -lt --time=ctime
実践例:いつ使い分ける?
使用例1:最近読んだドキュメントを探す
# アクセス時刻順で表示
ls -ltu ~/Documents/*.pdf | head -5
使用例2:権限を変更したファイルを確認
# 変更時刻順で表示
ls -ltc | head -10
使用例3:最近編集したコードを確認
# 修正時刻順(通常使うのはこれ)
ls -lt *.py | head -5
実践テクニック:よく使う便利な組み合わせ
1. 人間に読みやすい形式で表示
ファイルサイズを見やすくしつつ、日付順に!
ls -lht
実行例:
$ ls -lht
total 156K
-rw-r--r-- 1 user user 45K 12月 15 14:30 report.pdf
-rw-r--r-- 1 user user 12K 12月 15 09:15 data.csv
-rw-r--r-- 1 user user 2.5M 12月 14 18:45 image.jpg
drwxr-xr-x 2 user user 4.0K 12月 13 11:20 backup/
-h
オプションで、「2.5M」のように人間に優しい表示に!
2. 隠しファイルも含めて日付順
設定ファイルなども確認したい時:
ls -alt
実行例:
$ ls -alt
total 64
drwxr-xr-x 5 user user 4096 12月 15 15:00 ./
-rw-r--r-- 1 user user 220 12月 15 14:45 .bashrc
-rw-r--r-- 1 user user 1024 12月 15 09:30 document.txt
-rw------- 1 user user 600 12月 14 20:00 .ssh/
3. ディレクトリだけ/ファイルだけを日付順に
ディレクトリのみ:
ls -lt | grep "^d"
# または
ls -d */ | xargs ls -ltd
ファイルのみ:
ls -lt | grep "^-"
# または
find . -maxdepth 1 -type f -exec ls -lt {} +
4. 最新/最古のN個だけ表示
最新の5ファイル:
ls -lt | head -6 # ヘッダー行を含むので6
最古の5ファイル:
ls -lrt | head -6
5. 特定の拡張子で日付順
例:最新のログファイル5つ
ls -lt *.log | head -5
例:古いバックアップファイルを確認
ls -lrt *.bak *.backup 2>/dev/null
高度な使い方:findやstatと組み合わせる

findコマンドで更に詳細な日付検索
24時間以内に更新されたファイル:
find . -type f -mtime -1 -exec ls -lt {} + | head -20
7日以上前に更新されたファイル(古い順):
find . -type f -mtime +7 -exec ls -lrt {} +
特定の日付範囲:
# 2日前から5日前の間に更新されたファイル
find . -type f -mtime -5 -mtime +2 -exec ls -lt {} +
statコマンドで全ての時刻を確認
stat ファイル名
実行例:
$ stat report.txt
File: report.txt
Size: 2048 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1234567 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2024-12-15 16:00:00.123456789 +0900
Modify: 2024-12-15 14:30:00.987654321 +0900
Change: 2024-12-15 14:30:00.987654321 +0900
Birth: -
3つの時刻が一度に確認できます!
実用的なシェルスクリプト例
スクリプト1:古いログファイルを自動削除
#!/bin/bash
# old_log_cleaner.sh
LOG_DIR="/var/log/myapp"
DAYS_TO_KEEP=30
echo "=== 30日以上前のログファイルを削除 ==="
# 削除対象を表示
echo "削除対象ファイル:"
find "$LOG_DIR" -name "*.log" -type f -mtime +$DAYS_TO_KEEP -exec ls -lt {} +
# 確認
read -p "削除してよろしいですか? (y/n): " answer
if [ "$answer" = "y" ]; then
find "$LOG_DIR" -name "*.log" -type f -mtime +$DAYS_TO_KEEP -delete
echo "削除完了!"
else
echo "キャンセルしました"
fi
スクリプト2:最新バックアップの確認
#!/bin/bash
# latest_backup.sh
BACKUP_DIR="/backup"
echo "=== 最新のバックアップファイル TOP 10 ==="
ls -lht "$BACKUP_DIR"/*.tar.gz 2>/dev/null | head -10
echo ""
echo "=== 最古のバックアップファイル TOP 5 ==="
ls -lhrt "$BACKUP_DIR"/*.tar.gz 2>/dev/null | head -5
# バックアップの合計サイズ
echo ""
echo "=== バックアップ使用容量 ==="
du -sh "$BACKUP_DIR"
スクリプト3:今日更新されたファイルをリストアップ
#!/bin/bash
# today_files.sh
echo "=== 今日更新されたファイル ==="
find . -type f -daystart -mtime 0 -exec ls -lt {} + 2>/dev/null
echo ""
echo "=== 統計 ==="
count=$(find . -type f -daystart -mtime 0 2>/dev/null | wc -l)
echo "今日更新されたファイル数: $count"
エイリアス設定で効率化
よく使うコマンドは、エイリアスに登録しておくと便利!
~/.bashrcに追加:
# 日付順のエイリアス集
alias lt='ls -lt' # 新しい順
alias ltr='ls -lrt' # 古い順
alias lth='ls -lht' # 人間に優しい表示
alias lta='ls -alt' # 隠しファイルも含む
alias ltah='ls -alht' # 全部入り
# 最新/最古ファイル表示
alias newest='ls -lt | head -10' # 最新10個
alias oldest='ls -lrt | head -10' # 最古10個
# 今日のファイル
alias today='find . -maxdepth 1 -type f -daystart -mtime 0 -exec ls -lt {} +'
# 大きいファイルを日付順に
alias ltsize='ls -lhSr' # サイズ順(小→大)
alias ltsizer='ls -lhS' # サイズ順(大→小)
設定を反映:
source ~/.bashrc
これでlt
と打つだけで日付順表示できます!
トラブルシューティング
Q1. タイムスタンプが変わらない?
**原因:**noatimeオプションでマウントされている可能性
確認方法:
mount | grep noatime
解決策:
# relatimeオプションに変更(/etc/fstabを編集)
# noatime → relatime
Q2. 秒単位まで表示したい
GNU ls(Linux標準)の場合:
ls -l --full-time
出力例:
-rw-r--r-- 1 user user 2048 2024-12-15 14:30:15.123456789 +0900 report.txt
Q3. 日付のフォーマットを変更したい
ISO形式で表示:
ls -l --time-style=long-iso
独自フォーマット:
ls -l --time-style=+"%Y年%m月%d日 %H時%M分"
出力例:
-rw-r--r-- 1 user user 2048 2024年12月15日 14時30分 report.txt
Q4. ソートが効かない
**原因:**ロケール設定の問題
解決策:
# 一時的に
LC_ALL=C ls -lt
# または.bashrcに追加
export LC_COLLATE=C
パフォーマンスを考慮した使い方

大量ファイルがあるディレクトリでの注意点
遅い例:
# 10万ファイルあるディレクトリで
ls -ltr | tail -1 # 最新ファイルを取得(全ファイル処理)
速い例:
# findの方が効率的
find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -n | tail -1
メモリ使用量を抑える
# 大量ファイルの場合、パイプで処理
ls -t | head -100 > recent_files.txt
# xargsで分割処理
find . -type f -mtime -7 -print0 | xargs -0 ls -lt
実践例:日常業務での活用シーン
シーン1:開発中のソースコード管理
# 今日編集したソースファイル
ls -lt *.py *.js *.html | grep "$(date +'%b %d')"
# 最近のコミット候補を確認
git status -s | cut -c4- | xargs ls -lt
シーン2:ログファイルの調査
# エラーが発生した時間帯のログ
ls -ltr /var/log/*.log | tail -20
# 特定時間のログを探す
find /var/log -name "*.log" -newermt "2024-12-15 14:00" ! -newermt "2024-12-15 15:00" -exec ls -lt {} +
シーン3:バックアップ管理
# 最新バックアップの確認
ls -lt /backup/*.tar.gz | head -1
# 削除候補の古いバックアップ
ls -lrt /backup/*.tar.gz | head -20
シーン4:ダウンロードフォルダの整理
# 今週ダウンロードしたファイル
find ~/Downloads -type f -mtime -7 -exec ls -lht {} + | less
# 1ヶ月以上前の大きなファイル
find ~/Downloads -type f -mtime +30 -size +100M -exec ls -lh {} +
まとめ:lsの日付順表示で作業効率UP!
日付順表示をマスターすると、ファイル管理が劇的に楽になります。
覚えておきたい基本コマンド:
ls -lt
→ 新しい順(最も使用頻度高)ls -lrt
→ 古い順ls -lht
→ 人間に優しい表示
3つの時刻の使い分け:
- 通常はmtime(修正時刻)= デフォルト
- アクセス履歴はatime =
-u
オプション - 権限変更はctime =
-c
オプション
効率化のコツ:
- よく使うコマンドはエイリアス化
- findと組み合わせて柔軟な検索
- パイプやheadで必要な分だけ表示
実務での活用:
- 最新ファイルの確認
- 古いファイルの削除
- 特定期間のファイル抽出
これで、「あのファイルどこだっけ?」から解放されます! 日付順表示を使いこなして、快適なLinuxライフを送りましょう!
コメント