shell find - 控制文件路径

时间:2012-08-15 06:56:35

标签: linux find

我在makefile中使用以下命令:

LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp')

结果如下:

someDirectory/Common/...

我希望结果不包含someDirectory/部分。

这可能吗?

4 个答案:

答案 0 :(得分:5)

%P的{​​{1}}说明符将在搜索目录后打印路径名的一部分。

-printf

答案 1 :(得分:0)

如何管道到例如sed并将其删除?

类似的东西:

LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp' | sed 's@someDirectory/@@')

答案 2 :(得分:0)

如果你喜欢这样的话,你可以将它传输到sed

$(shell find $(COMMON_PATH)/ -type f -name '*.cpp') | sed -e 's/.*\///g

我认为这应该不确定我的语法是否正确,但我想是的。

答案 3 :(得分:0)

-printf '%P\n'解决方案很优雅。如果你没有使用GNU find,那么你可以使用$(subst from,to,text) make函数解决问题:

LOCAL_FILES = $(subst $(COMMON_PATH)/,,$(shell find $(COMMON_PATH) -type f -name '*.cpp'))

这会将任何$(COMMON_PATH)/替换为空字符串。请注意,这将在文件路径中出现两次的情况下,将$(COMMON_PATH)/字符串删除两次。