20,000개 이상의 파일/하위 디렉터리를 포함하는 디렉터리 목록을 가져옵니다.

20,000개 이상의 파일/하위 디렉터리를 포함하는 디렉터리 목록을 가져옵니다.

20,000개 이상의 파일/하위 디렉터리를 포함하는 모든 디렉터리 목록을 얻고 싶습니다.

예를 들어:

Folder A
|_ Folder A1
  |_ Folder A11
    |_ 25,000 files
  |_ 15,000 files
|_ Folder A2
  |_ 21,000 files
|_ 10 files

다음 목록을 얻고 싶습니다.

Folder A11
Folder A2

어떻게 해야 하나요?

답변1

디렉토리에 있는 이름의 수는 를 사용하여 계산할 수 있습니다 set -- *. 그런 다음 에서 개수를 찾습니다 $#.

를 사용하면 명령을 실행하고 find짧은 인라인 셸 스크립트에서 set값을 테스트할 수 있습니다.$#

find . -type d -exec sh -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
    done' sh {} +

인라인 sh -c스크립트는 발견된 디렉토리 경로 이름을 인수로 일괄적으로 가져옵니다. 스크립트는 이러한 경로 이름의 배치를 반복하고 *각 경로 이름의 glob을 확장합니다. 결과 목록에 20000개가 넘는 문자열이 포함된 경우 출력 디렉터리 경로 이름이 사용됩니다 printf.

개수숨겨진bash이름을 사용하면 쉘 옵션 세트 를 사용하여 dotglob쉘 호출 로 전환할 수 있습니다 .

find . -type d -exec bash -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
    done' bash {} +

원하시는 분들은 참고해주세요하다위의 인라인 스크립트의 일부로 이 작업을 수행하는 경우(말하는 대신,find명령의 출력을 구문 분석해 보십시오.):

find . -type d -exec bash -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] || continue

        # Process "$dirpath" here

    done' bash {} +

관련 정보