하위 디렉터리 없이 "기본 하위 디렉터리" 수를 알 수 있는 사람이 있나요?

하위 디렉터리 없이 "기본 하위 디렉터리" 수를 알 수 있는 사람이 있나요?

내가 원하는 것은 트리의 한 수준에서 디렉터리 수를 얻는 것입니다. 지금까지 나는 이것을 가지고 있습니다.

find /media/data/temp1  -type d -exec basename {} \;

이것은 나에게 다음을 제공합니다:

temp1
Coldplay
Greatest Hits
Sex Pistols
never mind the bollocks here's the sex pistols
the great rock and roll swindle
The Boomtown Rats
CD1
CD2
CD3
CD4
Doris Day
Greatest Hits

temp1 아래에 있는 "기본" 디렉터리의 실제로 하위 디렉터리인 모든 추가 디렉터리를 제거하고 개수를 가져와야 하는 디렉터리가 포함된 디렉터리를 제거하려면 다음을 수행합니다.

find /media/data/temp1 -mindepth 1 -maxdepth 1    -type d -exec basename {} \; 

이것은 나에게 다음을 제공합니다.

Coldplay
Sex Pistols
The Boomtown Rats
Doris Day

동일한 수준에 있는 모든 디렉터리 수를 계산하려면 실제 디렉터리 수준을 가져와야 합니다. 그래서 나는 그것을 다음과 같은 카운터를 추적하는 데 사용할 수 있습니다.

let TotalDir--
echo "Dir left to do is "$TotalDir""

그래서 저는 필요한 것을 얻기 위해 이와 같은 구문에 입력할 수 있는 간단한 함수가 있어야 한다는 것을 알았습니다.

TotalDir=$( echo find /media/data/temp1 -mindepth 1 -maxdepth 1 -type d -exec basename {} \;| "the function name needed here" )

어떤 함수 호출을 사용해야 할지 모르겠습니다. Linux에서는 이를 애플릿이라고 부르는데, 대부분의 사람들은 그 존재에 대해 거의 알지 못하는 반면, 다른 사람들은 이를 사용하는 방법에 대해 많은 지식을 갖고 있습니다.

답변1

찾고 있는 기능은 wc(단어 개수)이며, -l 옵션을 사용하면 줄 수를 계산할 수 있습니다(즉, 숫자 1 대신 문자 l).

그러나 이 작업을 수행하기 위해 find가 필요하지 않습니다. 원하는 작업을 수행하는 더 쉬운 방법은 다음과 같습니다.

TotalDir=$( ls -1d */ | wc -l )

그 뒤에는 숫자 1이 오고 ls그 뒤에 문자 l이 옵니다 wc.

편집: 아래 의견의 토론을 요약하기 위해 솔루션 작동 방식에 대한 자세한 설명은 다음과 같습니다.

  • -1ls하나의 열만 사용 하도록 지시 하므로 실제로 각 하위 디렉터리에 대해 하나의 행을 얻습니다.
  • -dls목록에 디렉토리만 표시 하고 내용은 표시하지 않습니다(차이점을 확인하려면 -d를 사용하거나 사용하지 않고 ls */를 시도하면 됩니다.
  • */ls현재 디렉토리 아래의 모든 디렉토리를 나열하도록 지시합니다 . 아래의 모든 디렉토리를 나열하라고 /path/to/ParentDirectory/*/알려줄 것입니다 .ls/path/to/ParentDirectory/
  • 마지막으로 wc -l명령에 의해 출력된 줄 수를 셉니다 ls. 이는 위에서 설명한 매개변수를 사용하여 정확히 하위 디렉터리 수입니다.

관련 정보