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

Linux Shell脚本如何获取匹配含空格模式的文件列表?

Shell脚本处理含空格的文件名匹配

问题场景

在Linux Shell脚本中,需根据环境变量PATTERN中存储的可能含空格的模式,获取目录中匹配该前缀的文件列表。常规的grep未正确处理空格、或find -name未加引号的写法会导致匹配失败。

示例文件列表:

file_without_spaces.vol-1.txt
file_without_spaces.vol-2.txt
file with spaces.vol-1.txt
file with spaces.vol-2.txt
file with spaces.vol-3.txt

当PATTERN="file_without_spaces"时,需输出:

file_without_spaces.vol-1.txt
file_without_spaces.vol-2.txt

当PATTERN="file with spaces"时,需输出:

file with spaces.vol-1.txt
file with spaces.vol-2.txt
file with spaces.vol-3.txt

解决方案

方法1:正确引用变量的find -name

find的-name参数支持shell通配符,只要确保PATTERN被双引号包裹,就能保留空格不被拆分:

# 仅查找当前目录下的文件,匹配以PATTERN开头的文件名
find . -maxdepth 1 -type f -name "$PATTERN*"
  • -maxdepth 1限制仅查找当前目录(如需递归可去掉)
  • -type f仅匹配文件(排除目录)
  • "$PATTERN*"确保空格被保留,*匹配前缀后的任意字符

方法2:printf+grep固定字符串匹配

利用printf正确输出含空格的文件名(每行一个),再用grep -F做固定字符串前缀匹配,避免正则元字符干扰:

# 输出当前目录所有文件名,匹配以PATTERN开头且紧跟点号的行
printf "%s\n" * | grep -F "^$PATTERN."
  • printf "%s\n" *会将每个文件名(含空格)单独输出一行,避免空格拆分问题
  • -F表示按字面匹配字符串,若PATTERN包含.、*等字符,不会被解析为正则元字符
  • ^$PATTERN.匹配以PATTERN开头且紧跟点号的文件名(符合示例中的后缀格式)

方法3:find正则匹配

若需更灵活的匹配规则,可使用find的-regex参数,同样注意变量引用:

# 用正则匹配路径,确保PATTERN被正确展开
find . -maxdepth 1 -type f -regex ".*/$PATTERN\..*"
  • .*/匹配文件的路径前缀(当前目录下为./)
  • $PATTERN\..*匹配PATTERN后紧跟点号和任意字符的文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:50:27