本文目录导读:

Bash/Linux Shell 脚本
#!/bin/bash
# 按扩展名移动文件到对应文件夹
for file in *; do
# 跳过目录
[ -f "$file" ] || continue
# 获取文件扩展名
ext="${file##*.}"
# 跳过没有扩展名的文件
[ "$ext" = "$file" ] && continue
# 创建目标文件夹(如果不存在)
mkdir -p "$ext"
# 移动文件
mv "$file" "$ext/"
done
使用说明:
- 将脚本保存为
move_by_ext.sh - 赋予执行权限:
chmod +x move_by_ext.sh - 在目标目录运行:
./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
使用建议
- 测试环境:先在测试目录运行,确保效果正确
- 备份数据:重要文件先备份
- 排除目录:注意脚本会跳过已存在的目录
- 大文件处理:处理大文件时考虑使用
rsync替代mv
如果需要更复杂的功能,如递归处理子目录、排除特定文件等,请告诉我具体需求!