怎样实现按时间排序文件脚本

wen 实用脚本 26

本文目录导读:

怎样实现按时间排序文件脚本

  1. 按修改时间排序(最常用)
  2. Python 脚本(跨平台)
  3. 高级功能脚本
  4. 使用 find 命令(Linux/Mac)
  5. 实用工具脚本
  6. 使用建议

按修改时间排序(最常用)

Linux/Mac 版本

#!/bin/bash
# 按修改时间排序(最新的在前)
ls -lt
# 按修改时间排序(最旧的在前)
ls -ltr
# 只显示文件名和修改时间
ls -lt | awk '{print $6, $7, $8, $9}'
# 递归显示所有文件
ls -ltR
# 按时间排序并显示详细格式
ls -l --time-style=long-iso -t

Windows CMD

@echo off
:: 按修改时间排序(最新的在前)
dir /O-D
:: 按修改时间排序(最旧的在前)
dir /OD
:: 按创建时间排序
dir /O-D /T:C
:: 递归显示所有文件
dir /S /O-D

Windows PowerShell

# 按修改时间排序(最新的在前)
Get-ChildItem | Sort-Object LastWriteTime -Descending
# 按修改时间排序(最旧的在前)
Get-ChildItem | Sort-Object LastWriteTime
# 按创建时间排序
Get-ChildItem | Sort-Object CreationTime -Descending
# 详细格式输出
Get-ChildItem | Sort-Object LastWriteTime -Descending | 
    Format-Table Name, LastWriteTime, Length -AutoSize

Python 脚本(跨平台)

#!/usr/bin/env python3
import os
import glob
from pathlib import Path
# 按修改时间排序
def sort_by_mtime(path="."):
    files = []
    for f in glob.glob(os.path.join(path, "*")):
        if os.path.isfile(f):
            mtime = os.path.getmtime(f)
            files.append((mtime, f))
    # 按时间排序(最新的在前)
    files.sort(reverse=True)
    return files
# 使用示例
files = sort_by_mtime()
for mtime, filepath in files:
    print(f"{time.ctime(mtime)} - {filepath}")
# 更现代的版本使用 pathlib
from pathlib import Path
from datetime import datetime
def sort_files_by_time(directory="."):
    path = Path(directory)
    files = [f for f in path.iterdir() if f.is_file()]
    # 按修改时间排序
    sorted_files = sorted(files, key=lambda f: f.stat().st_mtime, reverse=True)
    for f in sorted_files:
        mtime = datetime.fromtimestamp(f.stat().st_mtime)
        print(f"{mtime.strftime('%Y-%m-%d %H:%M:%S')} - {f.name}")
sort_files_by_time()

高级功能脚本

按时间排序并按扩展名过滤

#!/usr/bin/env python3
import os
from datetime import datetime
from pathlib import Path
def sort_files_by_time_with_filter(directory=".", extensions=None, 
                                   sort_by="mtime", reverse=True):
    """
    按时间排序文件,支持过滤
    Args:
        directory: 目录路径
        extensions: 文件扩展名列表,如 ['.txt', '.py']
        sort_by: 排序依据 ('mtime', 'ctime', 'atime')
        reverse: True为最新在前,False为最旧在前
    """
    path = Path(directory)
    files = []
    for f in path.iterdir():
        if f.is_file():
            # 过滤扩展名
            if extensions and f.suffix.lower() not in extensions:
                continue
            # 获取时间戳
            stat = f.stat()
            if sort_by == "mtime":
                timestamp = stat.st_mtime
            elif sort_by == "ctime":
                timestamp = stat.st_ctime
            elif sort_by == "atime":
                timestamp = stat.st_atime
            else:
                timestamp = stat.st_mtime
            files.append((timestamp, f))
    # 排序
    files.sort(reverse=reverse)
    return files
# 使用示例
# 查找所有Python文件,按修改时间排序
python_files = sort_files_by_time_with_filter(
    directory=".",
    extensions=['.py', '.txt'],
    sort_by="mtime",
    reverse=True
)
for timestamp, filepath in python_files:
    dt = datetime.fromtimestamp(timestamp)
    print(f"{dt.strftime('%Y-%m-%d %H:%M:%S')} - {filepath.name}")

递归处理子目录

#!/usr/bin/env python3
from pathlib import Path
from datetime import datetime
def recursive_sort_files(root_dir=".", pattern="*"):
    """
    递归查找文件并按时间排序
    Args:
        root_dir: 根目录
        pattern: 文件模式,如 "*.txt"
    """
    files = []
    for f in Path(root_dir).rglob(pattern):
        if f.is_file():
            mtime = f.stat().st_mtime
            files.append((mtime, f))
    # 按修改时间排序(最新的在前)
    files.sort(reverse=True)
    return files
# 使用示例
files = recursive_sort_files(".", "*.log")
for mtime, filepath in files:
    dt = datetime.fromtimestamp(mtime)
    print(f"{dt.strftime('%Y-%m-%d %H:%M:%S')} - {filepath}")

使用 find 命令(Linux/Mac)

# 查找文件并按时间排序
find . -type f -printf '%T@ %p\n' | sort -rn
# 格式化输出
find . -type f -printf '%T@ %p\n' | sort -rn | 
    while read timestamp file; do
        date -d @$(printf "%.0f" $timestamp) '+%Y-%m-%d %H:%M:%S'
        echo " - $file"
    done
# 限制文件数量(显示最近10个)
find . -type f -printf '%T@ %p\n' | sort -rn | head -10

实用工具脚本

自动清理旧文件

#!/bin/bash
# 删除30天前的文件
find /path/to/directory -type f -mtime +30 -delete
# 将7天前的文件移动到归档目录
find /path/to/source -type f -mtime +7 -exec mv {} /path/to/archive/ \;
# 移动最近修改的文件到工作目录
find /path/to/source -type f -mtime -1 -exec cp {} /path/to/workdir/ \;

监控文件变化

#!/bin/bash
# 实时监控目录变化
inotifywait -m /path/to/watch -e create -e modify -e delete |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
    done
# 使用 while 循环持续检查新文件
while true; do
    latest_file=$(ls -t | head -1)
    echo "Latest file: $latest_file"
    sleep 5  # 每5秒检查一次
done

使用建议

  1. 简单需求:使用 ls -ltdir /O-D
  2. 跨平台:使用 Python 脚本
  3. 复杂过滤:使用 Python 或 find 命令
  4. 自动化任务:使用 bash 脚本配合 cron 定时任务

选择最适合你场景的实现方式即可。

抱歉,评论功能暂时关闭!