首先,如果这是一个菜鸟问题,我深表歉意 - 我对 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
关于bash - 使用 bash 脚本搜索匹配的文件名模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815902/