Sziasztok!
Tudtok-e valami egyszerű megoldást egy könyvtárban található file-ok (csak file-ok) méretének összegzésére rekurzívan.
A "du" beleszámolja az alkönyvtárak méretét is, még ha üres is. (kapcsolót nem találtam rá hogy csak a file-okat méretét számolja.)
Eddig "find"-el kértem le, és soronként adogattam össze, de ez nem túl szép, és erőforráskímélő...
Python vagy bash megoldás érdekelne főként.
A másik, ami kicsit kapcsolódik ide, hogy ha egy könyvtár mérete megnő a sok file miatt, a fileok törlése után is e méret látszik az idode-ban.
Lehet-e "resetelni" hogy a nálam szokásos 4096 byte legyen a mérete, ha már üres.
(Könyvtár töröl, létrehoz megoldás nem ér.)
Igazándiból valami defrag megoldás lenne jó, ami a fájlrendszer összes könyvtár méretét igazítja a tartalma méretéhez.
- 1478 megtekintés
Hozzászólások
du -d kapcsoló? megadható 0 is.
- A hozzászóláshoz be kell jelentkezni
Debian lenny alatt sem a man-ban, sem a --help alatt nincs -d kapcsoló.
Milyen rendszer alatt nézed, és mit csinál?
- A hozzászóláshoz be kell jelentkezni
Mac os (tulképpen a BSD du-ja), de gondoltam a kapcsoló ugyanez Linux alatt is... Amúgy d, mint depth. Most megnéztem a linuxos du ugyanilyen értelmű kapcsolója a --max-depth=N, de így jobban megnézve, nem is ezt szeretnéd :) mert beleszámolja az alkönyvtárakat is (kicsit félreértettem a kérdést).
Szerintem ami neked kell, az kb ez lehet: du -hsS .
- A hozzászóláshoz be kell jelentkezni
Érdekesen működik... a -S kapcsoló által nem megy bele az alkönyvtárakba, viszont még így is hozzáad 4096 byte-ot a könyvtár filejainak hosszához. (Valószínű a "." belyegyzés 4096 byte-ja ami nem látszik...)
- A hozzászóláshoz be kell jelentkezni
Ha bash-ban összeadogatni nem elég gyors (és nincs közvetlen parancs a dologra), miért nem írod meg C-ben?
- A hozzászóláshoz be kell jelentkezni
Akarhogy is csinalod, vegig kell nyalaznod az osszes filet, es egyenkent osszeadogatni. Igy a findos megoldas akar jo is lehet, csak ugyesen kell csinalni, mondjuk valahogy igy:
(find $dir -type f | xargs stat -c '%s' | tr -d "\n"; echo 0) | bc -q
De lehet du-val is:
find $dir -type f | xargs du -bc
Elobbi azonban megbizhatobb, mert akkor is mukodik ha az xargs ugy dont, hogy hosszu a commandline es tobb reszletben futtatna.
- A hozzászóláshoz be kell jelentkezni
Inkább
(find . -type f -print0 | xargs -0 stat -c '%s' | tr "\n" "+"; echo 0) | bc -q
- A hozzászóláshoz be kell jelentkezni
"Elobbi azonban megbizhatobb, mert akkor is mukodik ha az xargs ugy dont, hogy hosszu a commandline es tobb reszletben futtatna."
Viszont a find tud úgy viselkedni, hogy nem kell hozzá stat - és a végén mégse lesz csövön cső a vége:
find -type f -ls | awk '{sum+=$7}; END { print sum}'
- A hozzászóláshoz be kell jelentkezni
Akkor mar:
(find $dir -type f -printf "%s+"; echo 0) | bc -q
Nem kell awkval szorakozni, find is meg tudja formazni. Hatrany a subshell, de az meg mindig kevesebb szerintem mint egy awk. Mondjuk itt meg van bc, de akar azt is ki lehet loni:
expr $(find $dir -type f -printf "%s + 0")
Ennek mondjuk megint az a hibaja, hogy ha tul sok a file, tul hosszu lehet a commandline. Nem tudom, van-e ennek linuxon limitje, de ugy erzem a bc-s megoldas szebb :]
- A hozzászóláshoz be kell jelentkezni
> expr $(find $dir -type f -printf "%s + 0")
helyett (persze ugyanakkor száll szét, csak spóroltál egy processzt)
echo $(( $(find $dir -type f -printf "%s + 0") ))
- A hozzászóláshoz be kell jelentkezni
A másik, ami kicsit kapcsolódik ide, hogy ha egy könyvtár mérete megnő a sok file miatt, a fileok törlése után is e méret látszik az idode-ban.
Nem e méret "látszik", hanem az a könyvtár ennyi helyet foglal el fizikailag a diszken. És a du is azért számolja bele, mert az a könyvtár annyi helyet ténylegesen el is foglal.
- A hozzászóláshoz be kell jelentkezni
Köszi a findes megoldásokat, biztos jobbak mint én csináltam pythonból a find eredményét soronként összeadva...
A könyvtárhoz visszatérve akkor ha jól látom a könyvtár inode egy olyan lemezterületre mutat ahol a könyvtárban tárolt fileok inode-jai vannak, ezért sok file esetén megnő a mérete.
- A hozzászóláshoz be kell jelentkezni