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

如何编写脚本实现基于部分文件名复制Linux目录中指定开头的文件并添加新后缀

嘿,我明白你遇到的麻烦了——要批量处理一批开头格式固定的文件,之前的循环没搞定对吧?其实用Linux的基础命令就能轻松解决,不用提前准备文件列表,我给你几个靠谱的方法:

方法1:用Bash循环逐个处理(推荐)

这是最直观且不容易出错的方式,能精准给每个匹配的文件加上后缀:

# 把xx_xxxx_xx替换成你实际需要匹配的开头格式
for file in xx_xxxx_xx*; do
    # 先检查是否是普通文件,避免误操作目录
    if [ -f "$file" ]; then
        # 把_copy替换成你想要的后缀,比如.bak
        cp "$file" "${file}_copy"
    fi
done

关键细节解释:

  • xx_xxxx_xx*:Bash的通配符,*会匹配任意长度的任意字符,完美覆盖所有以指定格式开头的文件(不管后面跟着什么内容或后缀)。
  • [ -f "$file" ]:这一步很重要,能过滤掉同名开头的目录,避免把目录也复制了。
  • ${file}_copy:Bash的变量扩展语法,会自动把原文件名和你要加的后缀拼接起来。比如原文件是xx_xxxx_xx_sales.csv,执行后会生成xx_xxxx_xx_sales.csv_copy;如果想加的是.bak这类后缀,改成${file}.bak就行。

举个实际例子:如果你要匹配开头是ab_cdef_gh的文件,复制后加.bak后缀,命令就是:

for file in ab_cdef_gh*; do
    if [ -f "$file" ]; then
        cp "$file" "${file}.bak"
    fi
done
方法2:用find命令(适合复杂场景)

如果你的文件分散在子目录里,或者需要更精细的筛选(比如只处理特定类型的文件),find命令会更灵活:

# 同样替换xx_xxxx_xx和.bak为你的实际需求
find . -maxdepth 1 -type f -name "xx_xxxx_xx*" -exec cp {} {}.bak \;

各参数说明:

  • -maxdepth 1:限制只在当前目录查找,不递归进入子目录(如果需要递归就去掉这个参数)。
  • -type f:只匹配普通文件,跳过目录、链接等。
  • -name "xx_xxxx_xx*":指定文件名的匹配规则,和之前的通配符逻辑一致。
  • -exec cp {} {}.bak \;:对每个找到的文件执行复制操作,{}代表找到的文件名,末尾自动加上.bak后缀。
注意事项
  • 如果你的文件名里包含空格、括号这类特殊字符,一定要用双引号包裹变量(比如"$file"),否则Bash会把文件名拆成多个部分处理,导致出错。
  • 执行命令前可以先把cp换成echo,比如echo cp "$file" "${file}_copy",这样能先预览要执行的操作,避免误删或复制错文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:22:42