You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash递归替换指定类型文件并保留原文件名?

递归替换指定目录下所有JPEG文件为占位图(保留原文件名)

这里有两个实用方案,分别适配不同场景,你可以根据自己的操作系统和使用习惯选择:

方案1:Shell脚本(Linux/macOS/WSL 推荐)

用find命令就能轻松实现递归查找+批量替换,命令简洁高效:

# 替换成你的占位图路径和目标目录
find /path/to/target/directory -type f -name "*.jpeg" -exec cp /path/to/placeholder.jpeg {} \;

细节说明:

  • -type f:只匹配文件,排除目录避免误操作
  • -name "*.jpeg":精准匹配后缀为.jpeg的文件;如果需要忽略大小写(比如匹配.JPEG/.Jpeg),可以换成-iname "*.jpeg"
  • -exec cp ... {} \;:对每个找到的文件({}代表当前匹配的完整文件路径)执行复制命令,用占位图直接覆盖原文件,自然保留原文件名

安全操作建议:

执行替换前,先打印所有待处理文件,确认没有误匹配:

find /path/to/target/directory -type f -name "*.jpeg" -exec echo "待替换文件:{}" \;

方案2:Python脚本(跨平台通用,Windows优先)

如果是Windows环境,或者需要更灵活的逻辑控制,Python脚本是更好的选择:

import os
import shutil

# === 配置参数,请替换成你的实际路径 ===
TARGET_DIR = "./your/target/directory"  # 要递归遍历的目录,用当前目录就写"."
PLACEHOLDER_PATH = "./placeholder.jpeg"  # 你的占位图路径
# ==================================

def replace_jpeg_files():
    for root, _, files in os.walk(TARGET_DIR):
        for filename in files:
            # 忽略大小写匹配所有JPEG格式文件
            if filename.lower().endswith(".jpeg"):
                file_path = os.path.join(root, filename)
                try:
                    # 用占位图覆盖原文件
                    shutil.copyfile(PLACEHOLDER_PATH, file_path)
                    print(f"✅ 已替换:{file_path}")
                except PermissionError:
                    print(f"❌ 权限不足,无法替换:{file_path}")
                except Exception as e:
                    print(f"❌ 替换失败 {file_path}:{str(e)}")

if __name__ == "__main__":
    replace_jpeg_files()

优势:

  • 跨平台兼容Windows、Linux、macOS
  • 自带错误处理,能清晰看到哪些文件出了问题
  • 可以轻松扩展逻辑(比如先备份原文件、过滤特定目录等)

备份扩展(可选):

如果担心误操作,可以先给原文件加后缀备份,再替换:

# 在shutil.copyfile之前添加备份代码
backup_path = f"{file_path}.bak"
shutil.copyfile(file_path, backup_path)
print(f"🔄 已备份:{backup_path}")

内容的提问来源于stack exchange,提问作者cjpembo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:30:12