2016-09-06 4 views
0

소스 디렉토리 (/ foo/source)에서 csv 파일을 찾고, 꼬리를 사용하여 처음 233 줄을 잘라내어 다른 디렉토리의 파일에 저장하는 작업 솔루션이 있습니다 (예 : an earlier question I asked)./foo/dest) :Makefile에서 xargs 기본 이름 사용

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

이 기능은 bash에서 실행 중일 때 유용합니다.

은 메이크 대상에서 동일한 명령이 실패 내 문제가있다 :

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 {})을 사용하라.