경로(하위 폴더 포함)의 파일 형식을 계산하는 Bash 스크립트

경로(하위 폴더 포함)의 파일 형식을 계산하는 Bash 스크립트

file이 도구를 사용하여 디렉터리(모든 하위 디렉터리 포함)의 다양한 파일 형식에 대한 개요를 빠르게 확인하고 싶습니다 . 예를 들어 어떤 파일 형식이 가장 일반적인지 알려줍니다.

bash이는 일반적인 쉘 언어나 스크립팅 도구(예: or)를 사용하여 실용적인 쉘 스크립트로 구현되어야 합니다 awk.

가능한 필수품:

  • 아주 좋은 성능
  • 모든 파일 이름이나 유형을 처리합니다.
  • POSIX 호환성

(마지막 두 점은 실제로 상호 배타적입니다)

답변1

sort | uniq -c동일한 행 수를 계산 하는 데 사용됩니다 .

find "$path" -type f -exec file -b {} + | sort | uniq -c | sort -nr

답변2

Bash 4 솔루션은 연관 정수 배열을 활용하고 구분 기호 확장이 0인 환경에서 작동합니다. 첫 번째 매개변수는 다음 매개변수가 모두 전달되는 대상 디렉터리입니다 file.

#!/bin/bash

# USAGE: script.sh PATH [PARAMS_FOR_FILE_CMD...]
# EXAMPLE 1: ./script.sh .
# EXAMPLE 2: ./script.sh /tmp --mime-type

path=$1
shift

if [[ ! -d "$path" ]]; then
  echo 'Path expected as first argument!' >&2
  echo "Usage: $(basename "$0") PATH [PARAMS_FOR_FILE_CMD...]" >&2
  exit 1
fi

declare -Ai type_stats

while IFS= read -r -d '' f; do

  t=$(file -b "$@" -- "$f")

  type_stats[$t]+=1

done < <(find "$path" -type f -print0)

for t in "${!type_stats[@]}"; do

  printf '\n%s\n-> %s\n\0' "$t" "${type_stats[$t]}"

done | sort -zrn -t'>' -k2

성능은 좋을 것입니다. 모든 파일 이름과 유형을 처리하는 것 같습니다(그러나 ">"가 포함된 유형이 없는 한 완전히 확실하지는 않습니다).

답변3

이 스레드는 오래되었지만 "bash 계산 파일 확장자"를 검색할 때 가장 높은 결과 중 하나입니다.

나는 당신과 같은 문제가 있었고 JigglyNaga와 유사한 스크립트를 만들었습니다.

다음은 작업 디렉터리와 하위 폴더에 있는 모든 파일의 확장자를 재귀적으로 계산하는 명령을 실행한 것입니다. 이는 UPPER 및 LOWER 사례를 고려하여 병합하고 위양성 결과를 제거하고 발생 횟수를 계산합니다.

find . -type f | tr '[:upper:]' '[:lower:]' | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n

더 많은 문서를 보려면 github 링크를 클릭하세요.

https://github.com/Hoppi164/list_file_extensions

관련 정보