使用 bash 脚本搜索匹配的文件名模式

Search for matching filename pattern with a bash script

首先,如果这是一个菜鸟问题,我深表歉意 - 我对 bash 脚本编写还很陌生。

我有一个包含多种文件和文件夹的目录。我需要对所有匹配特定模式的文件执行一组操作。这是模式:prefix_suffix.ext_suffix.ext 对于所有目标文件都是完全相同的,只有 prefix 部分是可变的。

是否有可能(如果可以,如何?)在 bash 内循环遍历所有匹配模式的文件名,并为 filename 设置一个变量,为 prefix 设置一个变量在循环内。我想避免使用 sed.

等外部工具

如有任何帮助,我们将不胜感激!谢谢!

for filename in *_suffix.ext; do 
    prefix="${filename%_suffix.ext}"
    #do your thing here
done

这使用 POSIX 后缀剥离功能(请参阅 man dash 并键入 /suffix<enter> 以搜索 suffix):

${parameter%word} Remove Smallest Suffix Pattern. The word is expanded to produce a pattern. The parameter expansion then results in parameter, with the smallest portion of the suffix matched by the pattern deleted.

(%% 会去除最长的匹配后缀,但由于我们在这里使用的是文字后缀而不是 glob 模式,因此在这种情况下两者是相同的)。

可运行示例:

for filename in pre1_suffix.ext pre2_suffix.ext; do     
       prefix="${filename%_suffix.ext}"
       echo "$prefix"
done

将打印

pre1
pre2