如何通过Shell脚本按后缀数字将唯一文件复制到对应目录
解决方案
要实现按数字后缀分组复制文件到对应目标目录,核心是提取每个文件名的数字后缀,将同后缀的文件归类到同一个目录,以下是修正后的Shell脚本及说明:
修正后的脚本
#!/bin/bash # 目标目录前缀,最终生成的目录为 Testing_1、Testing_2、Testing_3 等 dest_prefix="/Users/myprofile/Testing_" # 遍历当前目录下所有csv文件 for f in *.csv; do # 提取文件名末尾的数字后缀:先去掉.csv后缀,再截取最后连续的数字部分 base_name="${f%.csv}" suffix="${base_name##*[^0-9]}" # 拼接完整的目标目录路径 dest_dir="${dest_prefix}${suffix}" # 若目标目录不存在则创建(-p参数确保父目录也能被创建) mkdir -p "$dest_dir" # 将文件复制到对应目标目录 cp "$f" "$dest_dir/" done
脚本说明
- 提取数字后缀:
${f%.csv}移除文件名的.csv后缀,例如Test01.csv会变成Test01${base_name##*[^0-9]}去掉base_name中最后一个非数字字符之前的所有内容,仅保留末尾连续的数字,例如Nontesting02会变成02
- 确保目录存在:
mkdir -p命令能自动创建不存在的目录,避免复制时因目录缺失报错 - 分组复制:同数字后缀的文件会被复制到同一个目标目录下,完全匹配你的需求
原脚本问题分析
你之前的脚本中,count变量在每次循环时自增,导致每个文件被依次放到Testing_0、Testing_1、Testing_2...目录中,完全没有按数字后缀分组,这就是每个目录仅能复制一个文件的原因。
内容的提问来源于stack exchange,提问作者mahaveerr R
相关产品推荐
相关产品推荐

