모든 하위 디렉터리에서 소프트웨어 설치

모든 하위 디렉터리에서 소프트웨어 설치

저는 Ubuntu를 처음 접했고 소규모 프로젝트를 위해 설치했습니다. 패키지가 포함된 약 30개의 tar 아카이브를 추출했으며 이제는 각각 소스 코드와 configure파일이 포함된 많은 디렉터리가 있습니다.

모든 하위 디렉터리를 빠르게 반복하고 각 하위 디렉터리에서 구성 셸 스크립트를 실행하는 방법은 무엇입니까?

지금까지 폴더를 순환하고 구성 스크립트를 실행하기 위해 쉘 스크립트(i.sh라고 함)를 작성해 보았지만 소용이 없었습니다. 이것을 바로잡을 방법이 있나요? 어떻게 실행할 것인가?

find . -type d | while read d; do
    ./configure
    make
    sudo make install
done

터미널에 들어가서 실행해서 실행했습니다 sudo bash ./i.sh.

감사합니다!

답변1

현재 디렉토리의 모든 디렉토리를 반복하려면 더 간단한 루프를 사용하십시오.

for dir in ./*/; do
   # more here
done

이 패턴은 ./*/현재 디렉터리 내의 하위 디렉터리와 일치합니다.

여기서 사용하면 압축이 풀린 아카이브 내에서 하위 디렉터리를 찾게 find되므로 잘못된 작업을 수행할 가능성이 높습니다 .tar

각 디렉터리에 대해 해당 디렉터리로 이동하여 다음을 빌드 $dir하려고 합니다 .cd

for dir in ./*/; do
    ( cd "$dir" && ./configure && make && sudo make install )
done

괄호를 사용하면 명령이 하위 쉘에서 실행됩니다. 서브셸 내의 디렉터리 변경 사항은 서브셸 외부에 반영되지 않으므로 " cd반환"이 필요하지 않습니다.

&&("and")를 사용하여 명령을 함께 연결합니다. 즉, 하나의 명령이 실패하면 후속 명령이 전혀 실행되지 않습니다.

sudo당신은 이것을 사용 하지 않을 것입니다가능한이 단계에는 루트 권한이 필요 make install하며 앞에 sudo.

/usr/local기본적으로 아래의 모든 항목이 설치됩니다. 다른 설치 접두사에 설치하려면 예를 들어 --prefix=$HOME/localwith를 사용하십시오 configure(즉, 필요하지 않음을 의미).sudo 별말씀을요, 이미 홈 디렉터리에 쓰기 권한이 있기 때문입니다).

관련 정보