Za předpokladu, že chcete pouze rekurzivní počet souborů, nikoli adresářů a jiných typů, mělo by fungovat něco takového:
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
Tento úkol mě zaujal natolik, že jsem chtěl sám přijít na řešení. Nezabere to ani chvíli smyčky a MAY být rychlejší v rychlosti provádění. Netřeba říkat, že Thorovo úsilí mi hodně pomohlo pochopit věci do detailu.
Takže tady je můj:
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;
Z nějakého důvodu vypadá skromně, protože je mnohem výkonnější, než vypadá. :-)
Pokud to však máte v úmyslu zahrnout do .bash_aliases
soubor, musí vypadat takto:
alias somealias='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '\''echo "{} : $(find "{}" -type f | wc -l)" file\(s\)'\'' \;'
Všimněte si velmi složitého zacházení s vnořenými jednotlivými citáty. A ne, není pro sh -c
je možné použít dvojité uvozovky argument.
find . -type f | cut -d"/" -f2 | uniq -c
Zobrazí seznam složek a souborů v aktuální složce s počtem souborů nalezených pod nimi. Rychlé a užitečné IMO. (soubory se zobrazují s počtem 1).