for 루프는 여러 디렉터리를 평가하고 명령을 실행합니다.

for 루프는 여러 디렉터리를 평가하고 명령을 실행합니다.

쉘 스크립트를 편집 중인데 for를 사용하여 목록이나 변수를 사용하여 모든 디렉터리를 나열한 다음 명령을 실행하는 방법을 알고 싶습니다.

예:

나는 다음 디렉토리를 가지고 있습니다 :

/dirname1/app1
/dirname1/app2
/dirname2/app1
/dirname2/app2

문제는 각 디렉토리에 8개의 애플리케이션 디렉토리가 있고 각 디렉토리의 사용법을 알기 위해 du를 사용하여 각 애플리케이션 디렉토리의 값을 가져와야 한다는 것입니다.

제가 만든 샘플 코드가 있는데 실제보다 더 좋게 변환하고 싶습니다.

#!/bin/ksh

#files="/dev /etc"
inc=1

for f in /*;
do
vari=`du -ksh $f`
        [ -d $f ]

echo "The value of each one is: ------ : $((inc++)): $vari"
done;

echo "Execution Done."
exit 0

이 문제가 명확해졌으면 좋겠습니다

답변1

내 조언은 일을 단순하게 유지하라는 것입니다. 원하는 작업을 이미 수행하는 기성 도구가 있는 경우 전체 스크립트를 작성하지 마십시오.

du디스크 사용량을 보고하는 도구이자 find파일을 찾는 도구입니다. 함께 사용하세요.

find dirname* -mindepth 1 -maxdepth 1 -type d -exec du -hs {} \;

-maxdepthGNU 확장 입니다 -mindepth. 이를 이식 가능하게 처리하려면 아래에 설명된 대로 약간 더 복잡한 명령이 필요합니다.

이 경우 명령은 다음과 같습니다.

find dirname* -path '*/*' -prune -type d -exec du -hs {} \;

또는 모든 dirname*디렉터리가 여기에 있고 topdirectory다른 디렉터리는 없는 경우 다음을 사용하세요.

find topdirectory -path '*/*/*' -prune -type d -exec du -hs {} \;

topdirectory이것은 귀하가 요구하는 것인 디렉토리 내의 디렉토리만 보고합니다 .


고쳐 쓰다:다시 살펴보니 실제로 쉘 와일드카드를 완전히 사용하여 필요한 작업을 수행할 수 있습니다.

du -hs dirname*/app*/

디렉토리의 이름은 실제로 이런 방식으로 지정되지 않을 수도 있지만 실행할 수도 있고 du -hs */*작동할 수도 있습니다. 얼마나 깔끔하게 유지하느냐에 따라 나열하고 싶지 않은 다른 디렉토리(또는 파일)가 포함될 수도 있습니다. 디렉토리 학위.

관련 정보