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 {} +