如何修改脚本,使其仅匹配文件名下划线后的子串来移动文件?
问题场景
当前目录下有以下文件:
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
关键修改说明
- 通配符匹配:
*_"$keyword".tgz是核心,精准匹配文件名格式为任意内容_关键词.tgz的文件,实现了仅匹配下划线后子串的需求。 - 安全读取关键词:用
while read -r替代for file in $(cat),避免关键词或文件名含空格、特殊字符时出现异常。 - 容错处理:
mkdir -p确保目标目录存在,不会因目录缺失报错;[ -f "$file" ]判断文件真实存在,避免当关键词无对应文件时,mv命令处理通配符原样输出的无效路径。
内容的提问来源于stack exchange,提问作者shome
相关产品推荐
相关产品推荐

