脚本怎样按后缀移动文件

wen 实用脚本 27

本文目录导读:

脚本怎样按后缀移动文件

  1. Bash/Linux Shell 脚本
  2. 更完善的 Bash 版本
  3. Python 脚本(跨平台)
  4. Windows PowerShell 脚本
  5. 一键命令(Linux/Mac)
  6. 使用建议

Bash/Linux Shell 脚本

#!/bin/bash
# 按扩展名移动文件到对应文件夹
for file in *; do
    # 跳过目录
    [ -f "$file" ] || continue
    # 获取文件扩展名
    ext="${file##*.}"
    # 跳过没有扩展名的文件
    [ "$ext" = "$file" ] && continue
    # 创建目标文件夹(如果不存在)
    mkdir -p "$ext"
    # 移动文件
    mv "$file" "$ext/"
done

使用说明:

  1. 将脚本保存为 move_by_ext.sh
  2. 赋予执行权限:chmod +x move_by_ext.sh
  3. 在目标目录运行:./move_by_ext.sh

更完善的 Bash 版本

#!/bin/bash
# 定义要处理的扩展名列表
EXTENSIONS=("txt" "pdf" "jpg" "png" "doc" "docx")
# 颜色输出
GREEN='\033[0;32m'
NC='\033[0m'
move_files() {
    local ext="$1"
    local count=0
    # 创建文件夹
    mkdir -p "$ext"
    # 移动文件
    for file in *."$ext"; do
        [ -f "$file" ] || continue
        mv "$file" "$ext/"
        count=$((count + 1))
        echo -e "${GREEN}Moved:${NC} $file → $ext/"
    done
    echo "Moved $count .$ext files"
}
# 主程序
for ext in "${EXTENSIONS[@]}"; do
    move_files "$ext"
done

Python 脚本(跨平台)

#!/usr/bin/env python3
import os
import shutil
def move_by_extension(src_dir='.'):
    for filename in os.listdir(src_dir):
        filepath = os.path.join(src_dir, filename)
        # 跳过目录
        if os.path.isdir(filepath):
            continue
        # 获取扩展名
        name, ext = os.path.splitext(filename)
        # 跳过没有扩展名的文件
        if not ext:
            continue
        # 去掉开头的点
        ext = ext[1:] if ext.startswith('.') else ext
        # 创建目标文件夹
        dest_dir = os.path.join(src_dir, ext)
        os.makedirs(dest_dir, exist_ok=True)
        # 移动文件
        shutil.move(filepath, os.path.join(dest_dir, filename))
        print(f"Moved: {filename} -> {ext}/")
if __name__ == '__main__':
    move_by_extension()

Windows PowerShell 脚本

# 按扩展名移动文件
$extensions = @("txt", "pdf", "jpg", "png")
foreach ($ext in $extensions) {
    # 创建文件夹
    $folder = "$ext"
    if (-not (Test-Path $folder)) {
        New-Item -ItemType Directory -Path $folder
    }
    # 移动文件
    Get-ChildItem -Filter "*.$ext" | Move-Item -Destination $folder
    Write-Host "Moved *.$ext files to $folder/"
}

一键命令(Linux/Mac)

# 一行命令移动所有特定扩展名的文件
for ext in txt pdf jpg; do mkdir -p $ext && mv *.$ext $ext/ 2>/dev/null; done

使用建议

  1. 测试环境:先在测试目录运行,确保效果正确
  2. 备份数据:重要文件先备份
  3. 排除目录:注意脚本会跳过已存在的目录
  4. 大文件处理:处理大文件时考虑使用 rsync 替代 mv

如果需要更复杂的功能,如递归处理子目录、排除特定文件等,请告诉我具体需求!

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