filenames - GNU Make:删除第一个点后文件名的所有部分
问题描述
在 GNU Makefile(在 Ubuntu Linux 系统上)中,如何删除列表中每个文件名的文件名后缀,以使文件名在第一个点处被截断?
假设我有
NAMES = file1.a.b.c file2.x.y.z file3.b file4.foo
其中名称可能来自使用$(wildcard file*)
.
我想结束
NEWNAMES = file1 file2 file3 file4
甚至可能
NEWNAMES = file1.quux file2.quux file3.quux file4.quux
(不一定按此顺序)
该$(basename ...)
函数仅从名称中删除最后一个后缀。
在支持数组的外壳中,我会使用类似"${names[@]%%.*}"
or的东西"${names[@]/%.*/.quux}"
。
想要这样做的原因是我们正在使用一个生物信息学环境,其中文件具有已知的文件名前缀,但它们的后缀可能是.fa
, .fas
, .fasta
(等)的任意组合,这些后缀可能会加倍(如in .fa.fa
) 并且最后还有一个文件压缩器后缀,例如.gz
,。
无论初始文件名后缀有多复杂,我们都希望将文件名转换prefix.suffix
为 Makefile 中的规范化文件名。
解决方案
如果你想在不使用 shell 的情况下使用 make 函数,你可以使用这样的东西:
NAMES := $(foreach F,$(wildcard file*),$(firstword $(subst ., ,$F)))
推荐阅读
- php - 无法创建表`clothing`.`clothes`(errno:150“外键约束形成错误”)“)Laravel 7
- java - 如何在 Jackson 框架 rest api 中返回 JSONArray 的响应?
- function - 如何编写函数来计算除数?
- r - 如何通过基于某些逻辑标准选择的值来合并数据框?
- linkedin - 为什么我无法通过 api 更新 Campaign Group 总预算?
- javascript - 在 TCPConnectWrap.afterConnect 处连接 EACCES 0.0.0.0:443
- c# - 通过 MIM .dll 调用时,无法从任何应用程序调用 cmd.exe
- r - R插入元素如何将元素插入向量
- excel - Power Query: Include all unique columns found in files from folder
- tampermonkey - 如何使 Tampermonkey 用户脚本替换文本文件中的单词?