Linux
Vad är det för skillnad om jag vill sortera de 5 största filerna i en mapp enligt deras storlekar med hjälp av kommandoraden "ls -lrS | head -5" eller "ls -l | sort -rn -k5 | head -5"? Bägge två ger samma svar.
De ger ju samma svar så det är ekvivalent. Skulle föredra den första för det är tydligare att det är storlek man sorterar på, annars måste man ju räkna kolumner. Dessutom kortare och bara en pipe.
För mig blir det inte alls samma svar.
I princip ingen större skillnad, mest detaljer. Ibland kan små skillnader i olika linux-dialekter spela in så ska det sparas som ett script är det bra att göra det så robust som möjligt.
"ls -l" brukar skriva ut en "total"-rad först, den kommer att dyka upp först i resultatet från det första uttrycket men sist efter "sort" i det andra uttrycket (om mer än 5 rader syns det inte).
I båda fallen bör den plockas bort med t ex tail: "ls -lrS | tail +2|head -5"
Dito i det andra uttrycket.
Jag skulle också förorda att använda sorteringen som är inbyggd i ls. Rent generellt finns det många sätt att få fram det man vill ha och det är bra att kunna de 20-30 vanligaste kommandona, t ex grep, sed och awk.
Laguna skrev:För mig blir det inte alls samma svar.
Ja, det har du rätt i! Jag borde ha skrivit "ls -lS <sökväg> | head -6"
Får du inte en rad "Total ..." som första rad då?
Programmeraren skrev:Får du inte en rad "Total ..." som första rad då?
Jo, det får jag.
Om filer har storlek 0 så kommer kanske "Total 0" nånstans i mitten.
Dessutom verkar inte filer med samma storlek sorteras i samma ordning för de båda kommandona, men det kanske är odefinierat i båda fallen, jag har inte kollat upp det.
Från ls -l kommer "total"-raden först.
sort i det andra uttrycket sorterar på 5:e fältet som inte finns i raden med "total", den raden kommer då sist.
ls -l|sort -rn -k5
-rw-r--r-- 1 user eusers 15 Nov 24 20:48 fiff
-rw-r--r-- 1 user eusers 4 Nov 24 20:48 bapa
-rw-r--r-- 1 user eusers 4 Nov 24 20:47 apa
-rw-r--r-- 1 user eusers 3 Nov 24 20:49 ty3
-rw-r--r-- 1 user eusers 3 Nov 24 20:49 ty23
-rw-r--r-- 1 user eusers 3 Nov 24 20:49 ty2
-rw-r--r-- 1 user eusers 3 Nov 24 20:49 ty
total 0
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 6
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 5
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 4
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 3
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 2
-rw-r--r-- 1 user eusers 0 Nov 24 20:48 1
ls -Ssd1 *
ger dig storlek (sorterat) och filnamn och inget 'total'
Om du behöver mer information om varje fil:
ls -Sld1 *
Men jag hade nog bara använt:
ls -Sl | grep -v "^total.*"
eller
ls -Ss | grep -v "^total.*"
Varför dessa istället för t.ex "ls -Ssd1 *"?
För jag hade varit tvungen att tänka efter för att komma ihåg dessa flaggaor och vem komer ihåg att skriva "*"?
Blir många detaljer här, t ex är anledningen att "total"-raden hamnar i mitten i Lagunas exempel att han har flera filer av storlek 0 och avsaknaden av fält 5 i "total"-raden tolkas som 0 vid numerisk sort.
Frågan är kanske mer vad Marx fråga gäller?
Den är ställd som "Vad är det för skillnad om jag vill sortera de 5 största filerna i en mapp enligt deras storlekar ..." och som visats är skillnaden relativt liten.
Den mer långtgående tolkningen av frågan är "Vilket är det bästa sättet om jag vill sortera de 5 största filerna i en mapp enligt deras storlekar ...".
Det är också intressant huruvida man bara vill se resultatet på skärmen, eller om det ska bli input till något program. I det första fallet är det inte så kinkigt om det kommer med nånting extra.