Linuxのlsコマンドで日付順表示をマスター!ファイル整理が10倍速くなる方法

Linux

「最近編集したファイルを探したい」 「一番古いログファイルを削除したい」 「昨日作成したファイルだけ見たい」

こんな時、ファイル名順じゃなくて日付順で表示できたら便利ですよね?

実は、lsコマンドには日付順ソートの機能が豊富に用意されているんです。 でも、オプションが多くて覚えきれない…という人も多いはず。

この記事を読めば、日付順表示のすべてのパターンをマスターできます! さらに、実務で使える便利なテクニックも満載ですよ。


スポンサーリンク
  1. 基本編:最もよく使う日付順コマンド
    1. まずはこれだけ!基本の3つ
    2. オプションの意味を理解しよう
  2. 3種類の「時刻」を使い分ける
    1. Linuxファイルの3つの時刻
    2. それぞれの時刻で並べ替える
    3. 実践例:いつ使い分ける?
  3. 実践テクニック:よく使う便利な組み合わせ
    1. 1. 人間に読みやすい形式で表示
    2. 2. 隠しファイルも含めて日付順
    3. 3. ディレクトリだけ/ファイルだけを日付順に
    4. 4. 最新/最古のN個だけ表示
    5. 5. 特定の拡張子で日付順
  4. 高度な使い方:findやstatと組み合わせる
    1. findコマンドで更に詳細な日付検索
    2. statコマンドで全ての時刻を確認
  5. 実用的なシェルスクリプト例
    1. スクリプト1:古いログファイルを自動削除
    2. スクリプト2:最新バックアップの確認
    3. スクリプト3:今日更新されたファイルをリストアップ
  6. エイリアス設定で効率化
  7. トラブルシューティング
    1. Q1. タイムスタンプが変わらない?
    2. Q2. 秒単位まで表示したい
    3. Q3. 日付のフォーマットを変更したい
    4. Q4. ソートが効かない
  8. パフォーマンスを考慮した使い方
    1. 大量ファイルがあるディレクトリでの注意点
    2. メモリ使用量を抑える
  9. 実践例:日常業務での活用シーン
    1. シーン1:開発中のソースコード管理
    2. シーン2:ログファイルの調査
    3. シーン3:バックアップ管理
    4. シーン4:ダウンロードフォルダの整理
  10. まとめ:lsの日付順表示で作業効率UP!

基本編:最もよく使う日付順コマンド

まずはこれだけ!基本の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

最新のファイルが一番上に来るので、「さっき作ったファイルはどれだっけ?」がすぐ分かります!

オプションの意味を理解しよう

オプション意味覚え方
-llong format(詳細表示)Long(長い)
-ttime(時間順)Time(時間)
-rreverse(逆順)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オプション

効率化のコツ:

  1. よく使うコマンドはエイリアス化
  2. findと組み合わせて柔軟な検索
  3. パイプやheadで必要な分だけ表示

実務での活用:

  • 最新ファイルの確認
  • 古いファイルの削除
  • 特定期間のファイル抽出

これで、「あのファイルどこだっけ?」から解放されます! 日付順表示を使いこなして、快適なLinuxライフを送りましょう!

コメント

タイトルとURLをコピーしました