首先,如果这是一个noob问题,我道歉 - 我对bash脚本很不熟悉。
我有一个包含许多类型的文件和文件夹的目录。我需要对匹配特定模式的所有文件执行一组操作。这是模式:prefix_suffix.ext
。 _suffix.ext
对于所有目标文件都完全相同,只有prefix
部分是可变的。
是否有可能(如果是,如何?)在bash中循环遍历与模式匹配的所有文件名,并在循环中为filename
和prefix
设置一个变量。我想避免使用sed
等外部工具。
任何帮助将不胜感激!谢谢!
答案 0 :(得分:3)
for filename in *_suffix.ext; do
prefix="${filename%_suffix.ext}"
#do your thing here
done
这使用POSIX后缀剥离功能(请参阅man dash
并输入/suffix<enter>
来搜索suffix
):
$ {parameter%word}删除最小的后缀模式。这个词是 扩大到产生一种模式。然后产生参数扩展 在参数中,后缀的最小部分与。匹配 图案 删除。
(%%会删除最长的匹配后缀,但由于我们在这里使用文字后缀而不是glob模式,因此在这种情况下两者是相同的。)
可运行的示例:
for filename in pre1_suffix.ext pre2_suffix.ext; do
prefix="${filename%_suffix.ext}"
echo "$prefix"
done
将打印
pre1
pre2