2012-03-29 3 views
0

유닉스 명령어 찾기는 내가하고 싶은 것을하지 않습니다. find ../tmp -name "\*tmp\*"Unix find 명령에 path 인수로 variable을 어떻게 사용할 수 있습니까?

제대로 TMP 폴더

을에서 이름에 "TMP"를 포함하는 파일을 출력하지만 입력 할 때 :

dir=../tmp #assign ../tmp as a variable named dir 

find ${dir} -name "\*tmp\*" 
는 여기에 내가 입력하면 상황

입니다

출력 결과 : 해당 파일 또는 디렉토리 없음

내 생각 엔 쉼표를 찾습니다. nd는 변수 "dir"을 찾을 파일로 가정합니다. 이 문제를 해결하려면 어떻게해야합니까? 이 사실을 알고 싶은 이유는 스크립트의 경로로 경로를 전달할 수 있기 때문입니다. 감사

----------- 추가 코멘트

나는 bash 쉘을 사용합니다. 혼란을 드려 죄송합니다. 위의 코드가 작동합니다. 실제 문제는 {} 구조를 변수에 통합 할 때입니다. 예를 들어, 나는 입력하면

DIR = ../{tmp1, tmp3} 디렉토리

찾을 $ {DIR} -name "* TMP라는 변수로 #assign ../{tmp1,tmp3} * "

출력 결과 : 해당 파일 또는 디렉토리가 없음 왜 ??

+0

* 게시해야 할 내용 * 꼭 사용해야하는 작업 * 입력 한 명령의 정확한 목록과 정확한 결과를 제공 할 수 있습니까? 어떤 셸을 사용하고 있습니까? – FatalError

+1

입력 한 내용이 저에게 효과적입니다. 변수 expension'$ {dir}'또는 리터럴 문자열'../ tmp'를 사용하든간에 똑같은 출력을 얻어야합니다. 두 명령을 어떻게 & 언제 호출 할 것인가에있어 다른 것이 없다는 것이 확실합니까? 두 경우 모두 현재 작업 디렉토리가 동일합니까? – Celada

+1

어떤 셸을 사용하고 있습니까? tcsh? 세게 때리다? ksh? 아마도 bash 일지 모르지만 구체적이어야합니다. 다른 쉘은 변수를 할당하는 다른 방법을 가지고 있습니다. – ghoti

답변

2

(명령 행에서)

을 (용 프로그램을 호출, 환경 변수 설정 등) 이루어집니다. 그러므로 $ dir은 명령 행이 평가되기 전에 설정되지 않습니다. 이 문제를 해결하는 하나의 가능성은 ;

dir=../tmp ; find "$dir" -name "tmp" 

하여 사용에서 변수 설정을 분리 또는 두 개의 별도의 줄에 명령 (써밸 루바의 답변을) 작성하는 것입니다.

dir=../tmp 
find "$dir" -name "tmp" 
1

이 할 것 : 명령 행 명령 현명한 먼저 다음 조치 평가

# dir="../tmp/whatever/your/directory" 
# find $dir -name "*tmp*" 
관련 문제