Hitta antal filer i undermappar

Som bekant går det att använda ett kommando i terminalen för att se vad som tar plats:

du . | sort -nr > out.txt

Men det finns också ett kommando för att se antal filer i alla undermappar, för att se vilka mappar som behöver komprimeras. Det är mer komplext, men funkar lika bra i OSX som på Debian Linux.

find . -type d -exec sh -c 'str=$(ls -1 "{}" | wc -l | xargs);echo "$str {}";' \;|sort -nr > out.txt

find är som det låter till för att hitta filer.
-type är en parameter för att i det här fallet arbeta med mappar (d).
-exec är en parameter för att köra ett kommando för varje returnerat värde från find.
sh är för att köra ett kommando, i vanliga fall är det överflödigt då vi redan kör kod via -exec, men behövs i det här fallet för att vi använder pipes (|).
Sedan sätter vi strängen str till det returnerade värdet av ett kommando.
ls -1 är för att lista filerna i varje undermapp med endast filnamnen. När man kör ls för sig skriver man dock vanligen ls -la för att se alla filer med fullständig info.
wc -l är för att räkna rader (antal filer i det här fallet).
xargs är för att ta bort onödiga blanksteg, som trim i php.
echo är för att visa text, i det här fallet har vi variablerna $str som är satt till antal filer, och {} som är sökvägen som returneras av find. Vi behöver siffran först för att kunna sortera.
sort är för att sortera text, i det här fallet vill vi ha den numeriskt avtagande.

Publicerat av Lukas Mattsson

Yogi and developer