2010-05-12, 23:04
  #1
Medlem
perelis avatar
OBS Jag är helt ny när det gäller bashprogrammering.

Jag vill se hur stort varje hembibliotek är för vissa specifika användare (vilka finns inlagda i variabeln anv). Jag har gjort såhär:

Kod:
echo `du -h -s /home/${anv[$n]}` 

Problemet är det att användarna inte ligger direkt i /home/ utan i olika undermappar som dessutom ligger olika djupt. Därför funkar det inte att skriva t ex. "/home/*/${anv[$n]}" då jag bara får med vissa användare.

Hoppas någon kan ge mig en något sånär enkel lösning.
Citera
2010-05-13, 07:27
  #2
Bannlyst
Citat:
Ursprungligen postat av pereli
OBS Jag är helt ny när det gäller bashprogrammering.

Jag vill se hur stort varje hembibliotek är för vissa specifika användare (vilka finns inlagda i variabeln anv). Jag har gjort såhär:

Kod:
echo `du -h -s /home/${anv[$n]}` 

Problemet är det att användarna inte ligger direkt i /home/ utan i olika undermappar som dessutom ligger olika djupt. Därför funkar det inte att skriva t ex. "/home/*/${anv[$n]}" då jag bara får med vissa användare.

Hoppas någon kan ge mig en något sånär enkel lösning.

Under förutsättning att dina användares sökväg till hemkatalogerna börjar med /home, så kan detta användas och att du har en standard passwd-fil.
Kommandot använder kolon som separator, precis som i din passwd-fil.
Kod:
awk -F":" '/:\/home/{print $6}' /etc/passwd xargs du -sh 

Kort och gott, den letar efter förekomsten :/home i /etc/passwd filen, om den hittas så printas kolumn 6 från den raden och skickas vidare till xargs som sin tur skickar argumentet till du -sh.

Du måste normalt också ha root-rättigheter för att kan exekvera du -sh på alla användares hemkataloger.

Men eftersom du nämner vissa specifika användare, så kanske ovanstående inte passar dig, eftersom den tar alla användare med sökvägen /home.
Det kan du fixa med for-loop, while eller whatever, t ex nedan.
Kod:
for user in user1 user2 user3
do 
   
awk -F":" '/home/{print $6}' /etc/passwd xargs du -sh grep $user
done 
__________________
Senast redigerad av -rwxr-x 2010-05-13 kl. 07:50.
Citera
2010-05-13, 07:32
  #3
Bannlyst
felpost
__________________
Senast redigerad av -rwxr-x 2010-05-13 kl. 07:35.
Citera
2010-05-13, 18:04
  #4
Medlem
perelis avatar
Citat:
Ursprungligen postat av -rwxr-x
Under förutsättning att dina användares sökväg till hemkatalogerna börjar med /home, så kan detta användas och att du har en standard passwd-fil.
Kommandot använder kolon som separator, precis som i din passwd-fil.
Kod:
awk -F":" '/:\/home/{print $6}' /etc/passwd xargs du -sh 

Kort och gott, den letar efter förekomsten :/home i /etc/passwd filen, om den hittas så printas kolumn 6 från den raden och skickas vidare till xargs som sin tur skickar argumentet till du -sh.

Du måste normalt också ha root-rättigheter för att kan exekvera du -sh på alla användares hemkataloger.

Men eftersom du nämner vissa specifika användare, så kanske ovanstående inte passar dig, eftersom den tar alla användare med sökvägen /home.
Det kan du fixa med for-loop, while eller whatever, t ex nedan.
Kod:
for user in user1 user2 user3
do 
   
awk -F":" '/home/{print $6}' /etc/passwd xargs du -sh grep $user
done 

Tack! Ska testas så fort jag får tid, jo jag har redan lagt in det i en for-loop så det är inga problem.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in