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

标签 bash filenames

首先,如果这是一个菜鸟问题,我深表歉意 - 我对 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/

相关文章:

filesystems - 文件名的长度如何影响磁盘上的剩余存储空间?

bash - sed 不替换行

bash - 为什么 `echo $(find) | wc -l`无法正确计算文件数?

sql-server - SQL Server 备份的动态文件名?

http-headers - 如何使用 NanoHttpd 响应发送文件名

ios - iOS 或 OS X 上的文件名中哪些字符是非法的?

python - 从 ALPHANUMERIC 中查找缺失的数字 - Python

linux - 带有 smartctl 的 Bash 脚本不起作用

python - Bash 或 Python 或 Awk 来匹配和修改文件

linux - 使用 --color=always 选项时 grep 结果不同