디렉토리에서 모든 확장자와 해당 파일 수를 가져옵니다.


14

디렉토리의 모든 확장명을 얻는 것 : 쉬움. 특정 확장자에 대한 파일 수 얻기 : 쉬움.

그러나 모든 파일 확장자와 해당 파일 수를 얻는 것은 나를 암시합니다.

예.

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

다음과 같은 것을 반환해야합니다 :

.txt 2
.pdf 1
.pov 1

이 연습의 목적은 특정 디렉토리에서 어떤 파일 확장자가 인기가 있는지 알고 싶습니다.

미리 감사드립니다

답변:


47
/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

설명은 다음과 같습니다.

find ./ -type f

디렉토리가 아닌 파일 만 찾기

grep -E ".*\.[a-zA-Z0-9]*$"

확장자를 가진 필터 파일

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

경로 및 파일 이름 삭제, 확장자 만 저장

sort | uniq -c | sort -n

정렬, 유니크 및 정렬


정규 표현식에서 확장에 더 많은 문자를 허용 grep하고 다음을 수행 하여 제거 sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
할 수 있습니다.

grep과 sed를 sed로 교체 한 Dennis는 다음 오류를 반환합니다. sed : -e expression # 1, char 30 :`s '명령의 RHS에 대한 잘못된 참조 \ 1
denormalizer

2

Linux (gnu grep)를 사용하고 있으므로 PCRE (Perl RE) -P및 grep -o옵션 을 사용하는 것이 좋습니다 . @bindbn의 답변을 훌륭한 후보로 생각하십시오.

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.