2016-09-06 290 views
0

我有一个从an earlier question I asked的工作解决方案,用于在源目录(/ foo/source)中查找csv文件,使用尾部砍掉前233行,并将其保存到不同目录中的文件/ foo/dest):在Makefile中使用xargs basename

find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 {} > /foo/dest/$(basename {})' 

在bash中按原样运行时,此功能非常有用。

我的问题是在一个Makefile目标完全相同的命令失败:

copyfiles: 
    find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 {} > /foo/dest/$(basename {})' 

make copyfiles 

SH:/foo/dest//foo.source/somecsv.csv:没有这样的文件或目录

在Make中,似乎basename命令不再起作用,因为它只是在保存时使用源文件的整个路径+文件名。

为什么会发生这种情况,有没有办法解决这个问题?有没有更简单的方法来实现我在做什么?我需要搜索一个文件夹中的csv文件,尾部,然后保存到不同的位置。

谢谢!

+0

https://www.gnu.org/software/make/manual/html_node/Variables-in-Recipes.html假设带有'$'的子壳是变量。 – 123

+0

感谢指针@ 123。排序。谢谢 –

回答

1

感谢@ 123的提示,我设法回答我的问题:使用$$(basename {})