2015-02-05 2 views
0

make 파일에서 변수에 주어진 경로에서 일부 하위 디렉토리를 제거하려고합니다. 나는 $(shell ...)을 사용하여이를 수행 할 수 있다고 생각하므로 sed 한 줄짜리 또는 이와 유사한 것이 트릭을 할 것이라고 생각합니다. 어떤 적합한 make 기술이 그래도 할 것입니다.쉘을 사용하여 경로에서 하위 디렉토리를 제거하는 방법

변수에 포함 된 경로는 일반적으로 다음과 같습니다

/repo/myrepo/products/foo/prod1 
/repo/myrepo/products/cool_products/bar/prod2 
:

/repo/myrepo/products/foo/prod1/test/gtest/bin/XXX 

또는

/repo/myrepo/products/cool_products/bar/prod2/test/gtest/bin 

그리고 내가 결과를 제공, 위 prod1prod2 후 모든 것을 제거하려면

즉, 위트를 시작하는 모든 디렉토리를 제거합니다. 내가 가정 할 수있는 h test/gtest은이 경로를 적용 할 모든 경로에 있습니다. 나는 다른 수의 하위 디렉토리를 깔끔하게 정리할 방법을 찾아 내지 못했습니다.

답변

2
sed 's#/test/gtest.*##g' 

이렇게하면 /test/gtest에서 끝까지 모든 것이 제거됩니다.

샘플 : 당신이 GNU 내부 기능을 수행하려는 경우

AMD$ echo "/repo/myrepo/products/foo/prod1/test/gtest/bin/XXX" | sed 's#/test/gtest.*##g' 
/repo/myrepo/products/foo/prod1 
+0

감사합니다. 매력 작품처럼! 7 분 안에 받아 들일 것입니다 :) – Martin

+0

행복했기 때문에 ... 감사합니다 :-) –

1

또 다른 가능성, 대신 $(shell ...)를 통해 별도의 프로그램을 호출하는 할 것 같은 뭔가 :

FULL_PATH = /repo/myrepo/products/foo/prod1/test/gtest/bin/XXX 

STRIPPED_PATH := $(firstword $(subst /test/gtest, ,$(FULL_PATH))) 

기본적으로 이것은 "$(FULL_PATH)을 가져 와서 먼저 문자열에 /test/gtest을 공백 문자로 바꾸고 문자열의 첫 번째 단어를 반환합니다 그는 결과 문자열 ".

관련 문제