2015-02-04 5 views
1

저는이 사이트 (및 프로그래밍에 익숙하지 않은)를 처음 사용하고 있지만 도움이되기를 바랍니다.여러 디렉토리를 입력하고 명령을 실행하기위한 명령 줄 bash

나는 3K, 4K, 5K 등으로 이름 지어진 수많은 디렉토리가 있습니다. 각 디렉토리에는 v1에서 v12까지 12 개의 서브 디렉토리가 있으며 각 디렉토리에는 OUTCAR이라는 파일이 있습니다. 나는 각각의 서브 디렉토리에 들어가서 OUTCAR로부터 데이터를 수집 할 수있게 해주는 bash 명령어를 작성하려고한다.

각 하위 디렉토리를 개별적으로 입력하면이 기능이 아무런 문제없이 작동합니다. 나는 V {1..12}에서 파일을

을 사용하고

; grep "key_string"OUTCAR | awk '{print (relevant_stuff)}'> output.dat; done

v {1..12} 서브 디렉토리가있는 * K 벌금에서.

그러나 OUTCAR이 각 v {1..12}에 존재하지 않는다는 오류가 표시됩니다. 나는 그것을 알기 때문에 명령을 제대로 수행하지 않았다고 추측하고있다. 각 명령은 cd 명령을 사용하여 각 하위 디렉토리로 이동한다. 어떤 팁?

감사합니다.

+0

모든 출력 파일 output.dat 하나에 이동해야하거나 옆에 output.dat 파일을 원하십니까 각 OUTCAR 파일? 전반적으로 "find -name OUTCAR"와 같은 검색 명령을 사용하고 xargs를 통해 grepping/awking을하거나 "while read"루프로 결과를 반복하는 것이 더 쉽습니다. –

+0

각 OUTCAR에 대해 별도의 output.dat 파일을 생성하고 각 v1에서 v12 하위 디렉토리로 인쇄하려고합니다. – LRB83

답변

0

당신은 이러한 하위 디렉토리가 존재하는 곳 최상위 디렉토리에서이 find 명령을 사용하여 더 나은 것 :

find . -type d -name 'v[1-9][[1-9]' \ 
    -exec awk '/key_string/ {print FILENAME ":" $0}' {}/* >> output.dat \; 
+0

답변 해 주셔서 감사합니다. 나에겐 -type과 -name을 명확히 해 주시겠습니까? – LRB83

+0

'man find'에서 자세한 내용을 얻을 수 있습니다. '-type d'는 디렉토리 만 찾으며'-name'은 패턴과 일치합니다. 디렉토리 이름. – anubhava

+1

도움을 주셔서 다시 한번 감사드립니다. – LRB83