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 링크를 클릭하세요.