Как я могу найти все отдельные расширения файлов в иерархии папок? - PullRequest
199 голосов
/ 03 декабря 2009

На компьютере с Linux я хотел бы проследить иерархию папок и получить список всех различных расширений файлов в ней.

Каков наилучший способ добиться этого из оболочки?

Ответы [ 14 ]

2 голосов
/ 04 декабря 2009

Поскольку уже есть другое решение, использующее Perl:

Если у вас установлен Python, вы также можете сделать (из оболочки):

python -c "import os;e=set();[[e.add(os.path.splitext(f)[-1]) for f in fn]for _,_,fn in os.walk('/home')];print '\n'.join(e)"
1 голос
/ 13 февраля 2018

Я думаю, самый простой и понятный способ -

for f in *.*; do echo "${f##*.}"; done | sort -u

Он модифицирован по третьему пути ChristopheD.

1 голос
/ 04 декабря 2009

Ни один из ответов до сих пор не имел дело с именами файлов с символами новой строки должным образом (за исключением ChristopheD, которые только пришли, когда я печатал это). Следующее не является однострочником оболочки, но работает и работает достаточно быстро.

import os, sys

def names(roots):
    for root in roots:
        for a, b, basenames in os.walk(root):
            for basename in basenames:
                yield basename

sufs = set(os.path.splitext(x)[1] for x in names(sys.argv[1:]))
for suf in sufs:
    if suf:
        print suf
0 голосов
/ 25 марта 2013

Вы также можете сделать это

find . -type f -name "*.php" -exec PATHTOAPP {} +
...