Ни один из ответов до сих пор не имел дело с именами файлов с символами новой строки должным образом (за исключением 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