为了账号安全,请及时绑定邮箱和手机立即绑定

GNU中的递归通配符使?

GNU中的递归通配符使?

红颜莎娜 2019-10-17 14:22:23
自从我使用了一段时间以来make,请忍受...我有一个目录flac,其中包含.FLAC文件。我有一个对应的目录,mp3其中包含MP3文件。如果FLAC文件比相应的MP3文件新(或相应的MP3文件不存在),那么我想运行一堆命令将FLAC文件转换为MP3文件,并在其中复制标签。缺点:我需要flac递归搜索目录,并在mp3目录中创建相应的子目录。目录和文件的名称中可以有空格,并以UTF-8命名。我想用它make来驱动。
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

我会按照这些思路尝试


FLAC_FILES = $(shell find flac/ -type f -name '*.flac')

MP3_FILES = $(patsubst flac/%.flac, mp3/%.mp3, $(FLAC_FILES))


.PHONY: all

all: $(MP3_FILES)


mp3/%.mp3: flac/%.flac

    @mkdir -p "$(@D)"

    @echo convert "$<" to "$@"

给make初学者的几个快速笔记:


在@前面的命令在防止make从实际运行它之前打印命令。

$(@D)是目标文件名($@)的目录部分

确保其中带有shell命令的行以制表符开头,而不以空格开头。

即使这应该处理所有UTF-8字符和填充,它也会在文件名或目录名中的空格处失败,因为make使用空格分隔Makefile中的填充,并且我不知道解决此问题的方法。恐怕只剩下一个shell脚本了:-/



查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 421 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信