2016-11-11 6 views
0

나는 bash에 익숙하지 않고 상위 디렉토리의 모든 하위 디렉토리로 cd하려고하고 하위 디렉토리에있는 모든 파일에서 명령을 실행하려고합니다.하지만 작동하지 않습니다.쉘 스크립트 -cd 디렉토리의 모든 하위 디렉토리에서 파일에 명령 실행

for subdir in $parentdirectory 
do 
    for file in $subdir 
    do 
    ngram - lm somefilename.lm - ppl file 
    done 
done 
+0

특정 순서로 디렉토리를 탐색하려합니까 아니면 프로그램이 모든 단계에서 실행되도록하고 싶습니까? –

+0

나는 모든 단계에서 처형되기를 원한다. – user3606057

답변

0

이렇게하는 방법은 여러 가지가 있지만 명시 적으로 해당 디렉토리로 변경해야합니다. 당신은 작은이 작업을 수행하고자하는 경우 http://tldp.org/LDP/abs/html/loops1.html

0

: 또한 우수한 고급 Bash 스크립팅 가이드를 보라

for subdir in ${parentdirectory} 
do 
    cd ${subdir}  # go into the subdir 
    for file in * # glob expansion 
    do 
     ngram - lm somefilename.lm - ppl ${file} 
    done 
    cd ..   # go back up 
done 

: 제대로 초기화 $parentdirectory을 가정하면, 다음과 같은 무언가로 볼 수 있었다 공간의 양을 찾으려면 find -exec를 사용하여 뭔가 할 수 있습니다.

예를 들면 : 당신은 당신이 방금 만든 그 파일 각각에 문자열을 에코하기를 원한다면

# add a file called foo into every subdirectory find . -type d -exec sh -c 'touch "$0/foo"' {} \;

또는 :

# find all files and append 'ABC' into them find . -type f -exec sh -c 'echo "ABC" >> $0' {} \;

find -exec 콤보는 매우 강력 약간의 디렉토리/파일 네비게이션에서 당신을 구할 수있는 도구로, 내려가는/올라가는 것을하지 않고도 원하는 기능이 무엇인지를 달성 할 수 있습니다 디렉토리 구조.

또한, 당신이 조심하지 않으면 이런 종류의 문제가 심각하게 잘못 될 수 있으므로 잘 사용하십시오.