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

如何使用bash将多个带不同版本号的文件从一个目录复制到另一个?

错误原因
  • 通配符*被双引号包裹时,Shell 会将其识别为普通字符,不会触发文件名匹配展开,你脚本中"/home/user/Document/folderpath/$file"的写法把*直接当做了文件名的一部分,自然找不到对应文件
  • 原始for file in cat files.txt``的写法只会原样读取每行的规则字符串,不会触发通配符解析逻辑
  • 额外注意路径拼写错误:你描述的目标备份目录为/home/user/Document/backuppath,但示例脚本里写的是/home/user/Documents/backuppath(多了字母s),如果实际路径无s也会触发报错
修复方案

修改move.sh脚本内容如下即可实现通配符匹配,兼容后续版本号变动:

#!/bin/bash
# 定义源目录、目标目录
SRC_DIR="/home/user/Document/folderpath"
DEST_DIR="/home/user/Document/backuppath"
# 开启nullglob,匹配不到文件时不执行cp避免报错
shopt -s nullglob
# 提前创建目标目录,避免目录不存在报错
mkdir -p "$DEST_DIR"

# 逐行读取files.txt的匹配规则,跳过空行和注释行
while IFS= read -r pattern; do
    [[ -z "$pattern" || "$pattern" == \#* ]] && continue
    # 通配符部分不包裹引号,触发Shell自动展开匹配
    cp "$SRC_DIR"/$pattern "$DEST_DIR"/
done < files.txt

关键修改说明

  • 通配符对应的$pattern变量不包裹引号,确保Shell可以正常展开*匹配对应版本号的文件
  • 替换for cat的写法为while read逐行读取,避免规则包含空格或特殊字符时出现拆分错误
  • 增加shopt -s nullglob配置,某条规则匹配不到文件时不会执行cp,避免无匹配时报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:18:02