2016-09-06 88 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 {})