Portál AbcLinuxu, 8. května 2025 16:39
ls
neukazuje dole souhrn podobný DOSovskému dir
.
Někdo může namítnout, že to dělá příkaz du
, jenže ten se chová (pro můj vkus) dost podivně - vzhled výpisu je dost odlišný od ls
atd. Nebudu to teď rozebírat, každý si du
může vyzkoušet sám. Nakonec jsem po delší době skončil s docela šikovným skriptem, třeba se někomu taky bude hodit. Podotýkám, že programování v bashi nesnáším a moje vědomosti se v něm blíží nule (než jsem přišel na to, že uvnitř hranatých závorek podmínky "if" musí nutně být vlevo/vpravo mezery, to mi dalo zabrat). Skript se může nazvat jakkoli, já si ho hodil do ~/bin/, nazval jsem ho "dir" a mám v .bashrc alias se zkratkou "lu" (něco jako "list usage") kvůli kratšímu názvu
#!/bin/bash
# 2010-12-25 version 0.1
ls -oFX --color=auto --group-directories-first --time-style=long-iso;
echo ==========;
t=`du --human-readable --separate-dirs --one-file-system --summarize`;
# next line strips the dot at the end of the string
t=${t%\.}
f=0; for i in `find -maxdepth 1 -type f`; do let f++; done;
h=0; for i in `find -maxdepth 1 -type f -name ".*"`; do let h++; done;
if [ $f == 1 ] ; then
str1="FILE"
else
str1="FILES"
fi
if [ $h == 1 ] ; then
str2="FILE"
else
str2="FILES"
fi
echo "TOTAL SIZE $t IN $f $str1 ($h HIDDEN $str2)";
Jak si pozorný čtenář povšiml, přidal jsem i výpis počtu souborů a kolik je z toho skrytých souborů. Dále jsem "opravil" to, kvůli čemu by zasloužil Micro$oft nakopat do zadku: v DOSu se totiž vypisovalo(stále vypisuje?) "file(s)", místo aby se bralo v potaz jednotné a množné číslo. Ještě jednou upřesňuji, že se celkový součet všech velikostí týká pouze souborů v aktuálním adresáři.
Jakékoli nápady na zlepšení/zjednodušení uvítám.
P.S. Proč sem nejde vložit 8-bitové PNG??? Bere to jen 24-bitové.
Tiskni
Sdílej:
Slušeno by se k tomu ls přidat i parametr -h
ls -ll
mrkva@Destiny:~$ if [ 0 -eq 0 ]; then echo j; else echo n; fi j mrkva@Destiny:~$ if 0 -eq 0; then echo j; else echo n; fi bash: 0: příkaz nenalezen n(Jasně, je tu test).
if grep neco soubor > /dev/null then echo "neco je v souboru" fi
if expr $f '=' 1 > /dev/null then ... fiPamatuju si, na svůj první unixový předmět - přednášející nám říkal: "Za if je příkaz, když mi někdo bude u zkoušky tvrdit, že test nebo hranatá závorka, tak ho vyhodím."
if [ $f == 1 ] ; then
jen odeberu závorky, tak to fungovat prostě nebude.
Za if je příkazBlbě, za if je jeden nebo více příkazů.
grep neco soubor && echo "neco je v souboru"? Nebo jeste neco jinyho?
Když už, takfor i in `find -maxdepth 1 -type f`; do let f++; done;
find -maxdepth 1 -type f | wc -l
a určitě by to šlo ještě úsporněji.
Mimochodem, skutečně budou čísla sedět, když bude v aktuálním adresáři soubor, který bude mít v názvu nějaký znak z $IFS
? #!/bin/bash
# 2010-12-25 version 0.2
ls -oFX --color=auto --group-directories-first --time-style=long-iso
echo ==========
t=`du --human-readable --separate-dirs --one-file-system --summarize`
# next line strips the dot at the end of the string
t=${t%\.}
f=`find -maxdepth 1 -type f | wc -l`
h=`find -maxdepth 1 -type f -name ".*" | wc -l`
if [ $f -eq 1 ] ; then
str1="FILE"
else
str1="FILES"
fi
if [ $h -eq 1 ] ; then
str2="FILE"
else
str2="FILES"
fi
echo "TOTAL SIZE $t IN $f $str1 ($h HIDDEN $str2)"
Uz zbyva jen urychlit prvni spusteni (napr. v ~/ je to dost znat, domnivam se, ze to zpusobuje "du", ktery i pres parametr --summarize stejne leze do podadresaru a neco tam pocita). Vedel by nekdo, jak na to?
ls
a soucet bajtu me vetsinou nezajima. Tenhle skriptik se mi hodi jen obcas.
je to dost znatTak to toho máš v ~ ještě celkem málo, když je to „jenom“ dost znát:
78G . real 2m2.525s user 0m1.416s sys 0m7.132s
58G . real 4m32.711s user 0m0.280s sys 0m2.920s
$ time du -s --si * 17k lost+found 15G marian 1,7M test real 0m21.347s user 0m0.830s sys 0m0.379s
ls
zobrazit reálný součet bajtů? Když použiju
ls -l --block-size=1
tak dostanu zřejmě číslo, které vyjadřuje celkové zabrané místo na disku.
Upřesním:
total 32768 -rw-r--r-- 1 ghaad users 4615 Dec 7 11:12 file1.inc -rw-r--r-- 1 ghaad users 4666 Dec 7 10:52 file2.inc -rw-r--r-- 1 ghaad users 5447 Dec 7 11:02 file3.inc -rw-r--r-- 1 ghaad users 5267 Dec 7 11:06 file4.incNa disku soubory zabírají dohromady zřejmě 32768 bajtů, reálný součet je ale 19995 bajtů. Ten můj šílený skript přepisuju, jde to celé opravdu napsat o dost čistěji a bez použití
du
, čímž eliminuju tu pomalost při prvním spuštění.
alias ll='ls -l' alias lh='ls -ld .*' alias xdu='du -hs *' alias xdh='du -hs .[^.]*'
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.