2014-02-10 2 views
4

성능 테스트를위한 기준을 마련 할 수 있도록 문서의 대량 추출 작업을해야하는 특정 프로젝트를 진행하고 있습니다.모든 파일 형식과 디렉토리의 평균 크기를 나열하는 명령

특히, 재귀 적으로 디렉토리를 통과 할 수있는 명령이 필요하며 각 파일 유형에 대해 해당 유형의 파일 수와 평균 크기를 알려줘야합니다.

내가 좋아하는 솔루션을 검토 한 결과 : Unix find average file size, How can I recursively print a list of files with filenames shorter than 25 characters using a one-liner?https://unix.stackexchange.com/questions/63370/compute-average-file-size,하지만 아무것도 꽤 난 후 무엇을 저를 얻을 수 없습니다.

+0

그래서 당신은 아무것도 당신이 want_ 무엇을 누군가가 당신을 위해 뭔가를 요리해야 _exactly하지 않습니다 말을 의미합니까? – devnull

+0

시스템이이 명령을 지원 했습니까?'stat --format = "% s"FILE'. 파일 크기를 직접 줄 것입니다. – BMW

+0

@devnull 좋아, 어쩌면 내가 그 말을 잘못했다. 나는해야할 곳을 얻기 위해 _how_를 모른다. 포인터가 환영받을 것입니다. – Mardoz

답변

5

이 뒤와 AWK 조합은 당신을 위해 작동합니다 :

du -a mydir/ | awk -F'[.[:space:]]' '/\.[a-zA-Z0-9]+$/ { a[$NF]+=$1; b[$NF]++ } 
    END{for (i in a) print i, b[i], (a[i]/b[i])}' 
+0

감사합니다. 훌륭하게 작동합니다! 하나의 작은 변화지만, 나는'-' 스위치를'-'로 바꿨다. 왜냐하면'du' 명령에 이상한 기본 블록 크기가 있기 때문이다. – Mardoz

+0

당신을 진심으로 환영합니다. 그래, 그게 더 나아질거야. – anubhava

2

다음 스크립트를 사용하여 시작할 항목을 지정하면 파일 목록과 크기 목록이 한 줄씩 표시됩니다.

#!/usr/bin/env bash 

DIR=ABC 
cd $DIR 

find . -type f |while read line 
do 
    # size=$(stat --format="%s" $line) # For the system with stat command 
    size=$(perl -e 'print -s $ARGV[0],"\n"' $line) # @Mark Setchell provided the command, but I have no osx system to test it. 
    echo $size $line 
done 

출력 샘플

123 ./a.txt 
23 ./fds/afdsf.jpg 

그 다음 숙제는 위의 출력, 당신은 파일 형식 및 평균 크기를 쉽게 얻을 수 있어야한다

+0

OSX에서는'stat : illegal option --''을 제공합니다. 찾기 결과를 그룹화하는 좀 더 간결한 방법이 있기를 바랬지 만 쉘 스크립트를 작성해 보겠습니다. 포인터 주셔서 감사. – Mardoz

+1

당신은이 작은 Perl one-liner를 사용하여 stat 대신에 OSX에서 filesize를 얻을 수 있습니다 ... perl -e 'print -s $ ARGV [0], "\ n"'somefile –

+0

고마워, 내 대본에. – BMW

0

당신은 아마 "뒤"를 사용할 수 있습니다 :

du -a -c *.txt 

샘플 출력 :

,174,
104 M1.txt 
8 in.txt 
8 keys.txt 
8 text.txt 
8 wordle.txt 
136 total 

출력은 512 바이트 블록이지만 "-k"또는 "-m"을 사용하여 변경할 수 있습니다.