如何在Bash中将指定格式文件前缀路径存入变量并添加固定字符串?
批量处理文件名并存入变量的实现方法
核心思路
先提取所有文件的唯一前缀,格式化后拼接固定字符串,最终存入变量。以下是两种常用的Shell实现方式:
方法一:基础版(适用于文件名无特殊字符)
# 提取唯一前缀、格式化并拼接固定字符串 target_var=$(printf "./%s.," $(ls file*.{txt,log} | cut -d. -f1 | sort -u) "./stable.file.")
逐段说明:
ls file*.{txt,log}:列出所有fileX.txt和fileX.log格式的文件cut -d. -f1:以.为分隔符,提取文件名的前缀部分(如file1)sort -u:对前缀去重,得到唯一的file1、file2…filenprintf "./%s.,":给每个前缀加上./和.,并用逗号连接- 最后追加固定字符串
./stable.file.,结果存入target_var变量
方法二:安全版(支持含空格等特殊字符的文件名)
如果文件名包含空格或其他特殊字符,建议用find命令避免解析错误:
target_var=$(find . -maxdepth 1 -type f \( -name "file*.txt" -o -name "file*.log" \) | \ awk -F/ '{print $NF}' | awk -F. '{print $1}' | sort -u | \ awk '{printf "./%s.,", $0} END {print "./stable.file."}')
逐段说明:
find . -maxdepth 1 -type f \( -name "file*.txt" -o -name "file*.log" \):在当前目录下查找符合格式的普通文件awk -F/ '{print $NF}':提取完整文件名(去掉路径部分)- 后续步骤和基础版一致,完成前缀提取、去重、格式化和拼接
验证结果
执行完命令后,可通过echo $target_var查看变量内容,输出格式应为:./file1.,./file2.,./filen.,./stable.file.
内容的提问来源于stack exchange,提问作者Workhorse
相关产品推荐
相关产品推荐

