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

如何修改脚本,使其仅匹配文件名下划线后的子串来移动文件?

问题场景

当前目录下有以下文件:

Peter_XY.tgz Tom_GF.tgz Harry_AB.tgz

另有两个关键词文件:
A.txt内容:

AB1
AB
XY
SE
12S
G78

B.txt内容:

OR1
IU345
PIE678
GF
BF
MIL

需要将文件名中下划线后子串匹配A.txt中任意关键词的文件移到A目录,匹配B.txt中任意关键词的移到B目录,预期结果:

A/
├─ Peter_XY.tgz
└─ Harry_AB.tgz

B/
└─ Tom_GF.tgz

原脚本直接用关键词作为文件名执行移动,无法匹配目标文件,需修改。

修改后的脚本

处理A目录的移动逻辑

# 确保A目录存在,不存在则创建
mkdir -p A

# 逐行读取A.txt中的关键词
while read -r keyword; do
    # 匹配所有符合"*_关键词.tgz"格式的文件
    for file in *_"$keyword".tgz; do
        # 仅当文件真实存在时执行移动
        [ -f "$file" ] && mv "$file" A/
    done
done < A.txt

处理B目录的移动逻辑

mkdir -p B

while read -r keyword; do
    for file in *_"$keyword".tgz; do
        [ -f "$file" ] && mv "$file" B/
    done
done < B.txt
关键修改说明
  1. 通配符匹配:*_"$keyword".tgz是核心,精准匹配文件名格式为任意内容_关键词.tgz的文件,实现了仅匹配下划线后子串的需求。
  2. 安全读取关键词:用while read -r替代for file in $(cat),避免关键词或文件名含空格、特殊字符时出现异常。
  3. 容错处理:
    • mkdir -p确保目标目录存在,不会因目录缺失报错;
    • [ -f "$file" ]判断文件真实存在,避免当关键词无对应文件时,mv命令处理通配符原样输出的无效路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:39