-printf '%s+';
Hmm, ale tam kde to chci pouštět, find nezná parametr printf
To tam nejspíš nemáš normální GNU findutils, ale jen nějaký ořezaný busybox nebo něco takového, ne? V těchhle šizených prostředích bývá opruz řešit cokoli. Pokud se ti nechce s tím moc párat, zůstaň u té varianty s
-exec du, ale samozřejmě to bude na větším množství souborů zoufale pomalé, protože pro každý soubor to spouští extra proces
du. A spustit třeba stotisíckrát byť takhle lehoučký proces, to už chvíli trvá.
Možná ještě můžeš místo
du zkusit
stat -c '%s', jestli to třeba není rychlejší (pro jeden soubor to dělá prakticky to samé, jen na rozdíl od du vypíše jen velikost bez názvu souboru), ale osobně myslím, že to v nejlepším případě vyjde plus minus nastejno.
Pokud máš možnost nainstalovat find z těch GNU findutils, tak to vřele doporučuji. Je to běžná věc, tak by to snad nemusel být takový problém. Pokud tu možnost nemáš a potřebuješ velikosti počítat často, tak bych na tvém místě zvažoval spíš si napsat nějaký prográmek, který to pořeší. Samozřejmě pokud tam je k dispozici něco, v čem se to dá jednoduše napsat, třeba python nebo perl. Na vstupu může dostat seznam souborů z
find, protože procházet adresářovou strukturu programově je zbytečná a otravná práce navíc, zavolat pro každý soubor ze seznamu
stat() (jako funkce v tom jazyce to bude na rozdíl od command line utilit velmi rychlé, protože odpadá režie na spuštění dalšího procesu) a rovnou ty velikosti posčítat. Ve většině rozumných jazyků je to věc na pár řádků.