GNU/Linux >> Znalost Linux >  >> Linux

Získejte všechny přípony a jejich příslušný počet souborů v adresáři

Řešení 1:

/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

Zde je vysvětlení:

find ./ -type f

najít pouze soubor, nikoli adresář

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

filtrovat soubor s příponou

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

odstranit cestu a název souboru, uložit pouze příponu

sort | uniq -c | sort -n

sort, uniq and sort

Řešení 2:

Protože používáte Linux (gnu grep), je vhodný čas použít Perl REs (PCRE) -P a -o grepu volba. Odpověď @bindbn považujeme za skvělého kandidáta:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n

Linux
  1. Zobrazení seznamu všech úloh „at“ a jejich příslušných příkazů

  2. `^m` A jak se toho zbavit?

  3. Jak přesunout všechny zdrojové soubory Java do jejich příslušného adresáře balíčku?

  1. Třídit a počítat Počet výskytů řádků?

  2. Získejte nejnovější soubor v adresáři v systému Linux

  3. Jak vypsat velikost každého souboru a adresáře a seřadit podle sestupné velikosti v Bash?

  1. Odstraňte soubory a adresáře podle jejich jmen. Žádný takový soubor nebo adresář?

  2. Získat seřazený počet výskytů slov v textovém souboru všech slov a tiskový výstup?

  3. Jak najdu všechny odlišné přípony souborů v hierarchii složek?