Toon posts:

Unix: overzicht bestanden op hele schijf van een eigenaar

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik in een Unix systeem een overzicht op het scherm krijgen (in bv een dir formaat) van alle bestanden van een bepaalde eigenaar en daarbij de totale grootte van alle getoonde bestanden. Die besatanden staan mogelijk verspreid over het gehel systeem (gehele schijf). Ik kan inloggen als su.

  • MikeN
  • Registratie: April 2001
  • Laatst online: 20:02
code:
1
man find

en
code:
1
man du

Verwijderd

Topicstarter
Ik heb wel gezocht ook met man. Maar man find en man du kende ik niet. man dir wel maar daar was niets te vinden. Thnx. Zal deze commando's eens even gaan bekijken.

OK, ik kan nu wel alle bestanden van een bepaalde eigenaar op het scherm krijgen met "find / -user username" maar ik krijg het niet voor elkaar om de totale grootte van die getoonde bestanden te zien. Met du kan ik wel een overzicht produceren van bepaalde dirs maar eigenlijk zoek ik dus de combinatie van die twee. Dus alle bestanden met eigenaar x met daarbij de TOTALE grootte van alle bestanden (eventueel ook nog elk bestand of dir afzonderlijk).

[ Voor 59% gewijzigd door Verwijderd op 29-07-2003 15:38 ]


Verwijderd

Je kan met find een -exec {} optie meegeven. In die exec kun je een commando opgeven die hij voor elk bestand moet uitvoeren. Bijvoorbeeld "ls --size" of iets dergelijks. Ik zou zeggen, bedenk iets leuks. 8)7.

Verwijderd

ga naar de dir van een gebruiker.. en ram #du -sm
Krijg de grote van de dir waar je in zit, + subdirs.. toch?

  • MikeN
  • Registratie: April 2001
  • Laatst online: 20:02
Dat is ook een mogelijkheid. Mits de bestanden allemaal in 1 dir staan natuurlijk :)

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
Verwijderd schreef op 29 juli 2003 @ 14:53:
OK, ik kan nu wel alle bestanden van een bepaalde eigenaar op het scherm krijgen met "find / -user username" maar ik krijg het niet voor elkaar om de totale grootte van die getoonde bestanden te zien.
Met | (pipe-teken) kan je commando's aan elkaar koppelen. De uitvoer van commando 1 wordt dan doorgegeven aan commando twee.
Je krijgt dan iets als:
code:
1
find <argumenten> | du <argumenten>

De optie -exec na de find kreeg ik zelf niet voor elkaar, maar dat zou ook aan mij kunnen liggen.

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Met | (pipe-teken) kan je commando's aan elkaar koppelen. De uitvoer van commando 1 wordt dan doorgegeven aan commando twee.
Wat jij wil werkt niet omdat du geen invoer accepteert.
De optie -exec na de find kreeg ik zelf niet voor elkaar, maar dat zou ook aan mij kunnen liggen.
Bij exec moet je altijd goed opletten dat je de accolades en de punt-komma escaped door er een slash voor te zetten. Dus
code:
1
find . -exec echo \{\} \;
Anyway, je kan find alleen de grootte van een bestand laten zien en die dan weer door awk laten optellen. Ik heb ook de optie gebruikt om alleen regular files te zien omdat je de 'grootte' van een directory niet kan vergelijken met de grootte van een file. En als je het voor root wil doen heb je ook last van alle block files etc.
Dus:
code:
1
 find . -type f -user naamvanuser -printf "%s\n"|awk '{size += $1} END {print size}'

  • AntiChris
  • Registratie: Februari 2001
  • Laatst online: 10-12-2025

AntiChris

Fulltime IJsland-fan

Als een programma geen invoer vanaf stdin accepteert, maar wel als argumenten kan je het tooltje xargs eens proberen:
code:
1
echo file1 file2 | xargs du


Dit voert dan hetzelfde uit als:
code:
1
du file1 file2

En það besta sem guð hefur skapað, er nýr dagur - Sigur Rós


  • igmar
  • Registratie: April 2000
  • Laatst online: 20-04 22:06

igmar

ISO20022

Verwijderd schreef op 29 July 2003 @ 14:53:
Ik heb wel gezocht ook met man. Maar man find en man du kende ik niet. man dir wel maar daar was niets te vinden. Thnx. Zal deze commando's eens even gaan bekijken.

OK, ik kan nu wel alle bestanden van een bepaalde eigenaar op het scherm krijgen met "find / -user username" maar ik krijg het niet voor elkaar om de totale grootte van die getoonde bestanden te zien.
code:
1
find . -name username -printf '%p' | du


zou aardig in de buurt moeten komen.

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

ls -lR /
find /
du -a /

If you choose to criticise you choose your enemies


  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Vergeet de -A niet bij ls zodat je ook de verborgen bestanden ziet dus:

ls -lRA /

[ Voor 3% gewijzigd door Buffy op 31-07-2003 11:24 ]

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)


Verwijderd

Verwijderd schreef op 29 July 2003 @ 14:47:
Hoe kan ik in een Unix systeem een overzicht op het scherm krijgen (in bv een dir formaat) van alle bestanden van een bepaalde eigenaar en daarbij de totale grootte van alle getoonde bestanden. Die besatanden staan mogelijk verspreid over het gehel systeem (gehele schijf). Ik kan inloggen als su.
Ik wil niet heel vervelend doen, maar kun je niet quota's installeren ? - dan kun je met 'repquota' gewoon percies zien wat jij wilt.

offtopic:
en als mooie bijkomstigheid kun je die mensen ook nog 'binden' aan een aantal mb's/files

[ Voor 22% gewijzigd door Verwijderd op 30-07-2003 17:20 ]


  • pjottum
  • Registratie: Mei 2000
  • Laatst online: 04-05 17:02

pjottum

¯\_(ツ)_/¯

code:
1
2
3
4
5
6
7
i=o
k=`find / -username <user> -exec du {} | awk -F\  '{print $1}'`
for j in $k
do
 i=`expr $i + $j`
done
echo $i

zo ongeveer ..

[ Voor 13% gewijzigd door pjottum op 31-07-2003 11:01 ]

I have usernames older than you.


  • arikkert
  • Registratie: Juli 2002
  • Laatst online: 17-02 12:23
zoals novalue schreef.
Zorgen dat je OS met userquota kan omgaan (evt kernel rebuilden met option quota) heeft idd als voordeel dat je op elke moment een live overzicht kan krijgen van het totaal aan diskusage van elke user. Je kunt per filesystem aangeven of je userquota/groupquota wilt enablen.

  • igmar
  • Registratie: April 2000
  • Laatst online: 20-04 22:06

igmar

ISO20022

pjottum schreef op 31 juli 2003 @ 11:01:
code:
1
2
3
4
5
6
7
i=o
k=`find / -username <user> -exec du {} | awk -F\  '{print $1}'`
for j in $k
do
 i=`expr $i + $j`
done
echo $i

zo ongeveer ..
Waarom zo moeilijk als find | du hetzelde doet ??

Verwijderd

igmar schreef op 31 July 2003 @ 12:31:
[...]


Waarom zo moeilijk als find | du hetzelde doet ??
Doe eens find | du en du en kijk eens wat het verschil is (hint: none)? En jeroene, waarom doe je in het voorbeeld exec gebruiken en als uiteindelijke voorbeeld weer niet? Als je consequent was geweest had het er zo uitgezien:

find / -type f -user lp -exec du \{\} \;

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
En jeroene, waarom doe je in het voorbeeld exec gebruiken en als uiteindelijke voorbeeld weer niet?
Ik heb alleen een voorbeeldje laten zien met -exec omdat cowgirl melde dat het haar nooit gelukt was om -exec aan de praat te krijgen.

Overigens zie ik nu dat zowel mijn versie als de jouwe beide niet doen wat er gevraagd wordt. Die van jou laat alleen de bestanden en de grootte zien, die van mij alleen de totale grootte en de TS wilde een combinatie.

Ik gebruikte zelf overigens geen -exec omdat je daarmee in de problemen kan komen als iemand heel veel files heeft. De maximale lengte van de commandline is weliswaar erg groot, maar als je met find een hele HD af gaat dan heb je hem eerder bereikt dan je denkt.
Wordt het iets als:
code:
1
find . -type f -user naamvanuser -printf "%s %p\n"|awk '{size += $1}{print} END {print "Totaal: " size " bytes"}'
Voor 'eenmalig' gebruik is het leuk, maar als je het regelmatig wil doen kan je inderdaad beter quota's gaan gebruiken zoals anderen als voorstelden.
Pagina: 1