여러 폴더에 있는 파일 수 계산(파일 확장자 기준)

여러 폴더에 있는 파일 수 계산(파일 확장자 기준)

예를 들어 설명하는 것이 가장 좋은 것 같아요

parent1 (located inside /home/myuser
  - folder1
    - test11.png
    - test11.txt
    - folder11
      - test111.png
    - folder12
      - test121.png
      - test122.png
  - folder2
    - test21.png

내가 대본을 쓸 수 있다면

get-number-of-files-per-folder "parent" png

출력은 다음과 같아야 합니다.

folder1: 4
folder2: 1

현재 이 명령을 사용하고 있는데 나열한 파일 확장자뿐만 아니라 모든 파일을 계산하는 것 같습니다.

find /home/myuser/parent -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -iname "*png" -type f | wc -l)" file\(s\)' \;

이것이 잘못된 것인지 어떻게 알 수 있나요? 왜냐면 내가 이것을 실행할 때

find /home/myuser/parent -iname '*jpg' -type f | wc -l

JPG 파일이 없다고 나와 있는데 위 스크립트에서는 폴더에 xx개의 파일이 있다고 나와 있습니다.

답변1

간단한 쉘 스크립트 방법:

#!/bin/sh

if [ "$#" -ne 2 ]; then
    echo "Usage: $0 directory extension" >&2
    exit 1
fi
cd "$1" || exit 1
for d in *; do
    [ -d "$d" ] || continue
    printf "%s: %i\n" "$d" \
        "$(find "$d" -type f -name "*.$2" -printf '1\n' | wc -l)"
done

...셸을 사용하여 대상 디렉터리의 모든 파일/디렉터리를 반복합니다(물론 로 시작하는 숨겨진 파일/디렉터리 제외 .). 디렉터리가 아닌 항목은 무시하고 디렉터리의 경우 이름과 파일 수( find및 를 사용하여 얻은 wc)를 인쇄합니다. 이 방법으로 find … -printf '1\n'find는 1찾은 모든 파일을 인쇄합니다. 파일 이름을 인쇄하지 않으면 파일 이름의 줄 바꿈과 같은 모든 문제를 피할 수 있습니다. 행 수만 세면 됩니다. 그게 전부입니다.

답변2

GNU 를 가정 find하고 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.

find /path/to/parent1 -mindepth 2 -type f -iname '*.png' -printf '%P\n' | \
    sed 's#/.*##' | \
    sort | \
    uniq -c

답변3

찾다+현재 폴더 구조에 대한 방법 /home/myuser/parent1/<folder>:

find /home/myuser/parent1 -type f -name "*.png" \
     | awk -F'/' '{ a[$5]++ }END{ for(i in a) print i,a[i] }'
  • $5- 원하는 수준을 가리키는 폴더 이름(폴더 구조가 다른 경우 이 이름을 조정하세요. 상위 디렉터리보다 더 깊은 두 디렉터리여야 합니다. 따라서 , 입니다 /tmp/parent1. )$4/home/myuser/Documents/parent1$6

관련 정보