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

Bash脚本如何按文件名前缀搜索子目录文件并批量复制

问题原因
  • 路径配置错误:你脚本中写的~/name.txt和~/OUTPUTDIR指向当前用户的家目录,和你描述的「与当前工作目录同级」的路径要求不符,首先无法读取到正确的前缀列表,其次输出目录路径也不匹配。
  • 搜索范围错误:原有脚本仅在脚本执行的当前目录下搜索匹配前缀的文件,没有进入指定的源目录递归遍历所有子文件夹,自然找不到存放在源目录子目录内的目标文件。
  • 通配符展开异常:直接拼接"$file"*的写法如果当前目录下没有匹配文件,通配符*会被当作普通字符串传递给cp命令,就会出现你看到的cannot stat 'xxx*'报错。
修正后的脚本
#!/bin/env bash
# 请根据你的实际文件名修改下方三个变量的取值
NAME_FILE="../name.txt"       # 前缀列表文件,和当前工作目录同级则前缀加../
SOURCE_DIR="../source_dir"    # 替换为实际的源目录名称
OUTPUT_DIR="../output_dir"    # 替换为实际的输出目录名称

# 自动创建输出目录,避免目录不存在报错
mkdir -p "$OUTPUT_DIR"

# 逐行读取前缀列表,兼容含空格/空行的前缀文件
while IFS= read -r prefix || [ -n "$prefix" ]; do
    # 跳过空行
    [ -z "$prefix" ] && continue
    # 递归搜索源目录下所有匹配前缀的文件,复制到输出目录
    find "$SOURCE_DIR" -type f -name "${prefix}*" -exec cp {} "$OUTPUT_DIR"/ \;
done < "$NAME_FILE"
可选优化
  • 如果存在重名文件不想覆盖,可将cp改为cp -n,-n参数会自动跳过已存在的重名文件。
  • 如果需要保留源文件的目录层级结构,可将cp改为cp --parents,会在输出目录下自动重建原文件的父目录结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08