![ls 명령을 사용하여 디렉터리 파일 수를 반복적으로 표시하려면 어떻게 해야 합니까? [폐쇄]](https://linux55.com/image/197296/ls%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%ED%8C%8C%EC%9D%BC%20%EC%88%98%EB%A5%BC%20%EB%B0%98%EB%B3%B5%EC%A0%81%EC%9C%BC%EB%A1%9C%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
Ubuntu의 bash에서 디렉터리를 가져오고 ls -lah
디렉터리의 파일 수를 반복적으로 표시하도록 하고 싶습니다. 즉, 디렉터리와 하위 디렉터리의 모든 파일 수를 계산하고 싶습니다.
가능합니까?
답변1
ls
대부분의 Unix에서 이 유틸리티의 출력은 일반적으로 보기에만 적합하기 때문에 여기서 사용하라는 요청을 무시했습니다 .
아래에서는 with find
를 사용하여 bash
현재 디렉터리의 각 하위 디렉터리에 있는 이름 수를 재귀적으로 계산합니다.
find . -type d -exec bash -O nullglob -O dotglob -c '
for dirpath do
set -- "$dirpath"/*
printf "%s:\t%d\n" "$dirpath" "$#"
done' bash {} +
이는 bash
디렉토리 경로 이름 배치로 호출되며 인라인 스크립트는 지정된 배치를 반복하고 *
각 배치에서 와일드카드 패턴을 확장합니다. 쉘 옵션을 설정 nullglob
하면 dotglob
이름 목록(아마도 숨겨진)으로 확장되며 $#
해당 목록의 길이가 됩니다.
현재 작업 디렉토리의 최상위 디렉토리 수만 원하는 경우:
shopt -s globstar nullglob dotglob
for dirpath in */; do
set -- "$dirpath"/**
printf '%s:\t%d\n' "$dirpath" "$#"
done
더 이상 을 사용할 필요가 없다는 점을 제외하면 거의 동일합니다 find
. **
재귀를 사용하여 각 디렉터리 아래의 모든 이름을 반복한 다음 이전과 같이 결과를 표시합니다.
실제로 코드를 약간 수정하여 find
전혀 작업을 수행하지 않고도 첫 번째 코드 조각을 다시 만들 수 있습니다. 각 디렉터리의 이름 개수를 재귀적으로 가져옵니다.
shopt -s globstar nullglob dotglob
for dirpath in **/; do
set -- "$dirpath"/*
printf '%s:\t%d\n' "$dirpath" "$#"
done
한 곳에서 다른 곳으로 만 옮겼다는 점에 유의하시기 바랍니다 *
.