Kirjoittaja Aihe: Miten siirtää ls:n total tulosteen loppuun? [Ratkaistu]  (Luettu 6223 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Ls:n tulosteessa tiedostojen yhteiskokohan tulostuu heti alkuun, mutta mukavampaa olisi, että se tulisi vasta lopussa, jolloin se jäisi ruudulla näkyviin.

Netistä löytyy pilvin pimein erilaisia vaihtoehtoja, mutta kaikkia ovat hieman kryptisiä. Päädyin kuitenkin seuraavaan:

Koodia: [Valitse]
myfunction() {     ls -alFh "$1";     ls -alFh "$1" | head -1; }

Ja se tulostaa hienosti:

Koodia: [Valitse]
$ myfunction ../tmp/
total 16K
drwxrwxr-x  2 ari ari 4,0K syys   28 21:41 ./
drwxr-x--- 32 ari ari 4,0K syys   28 21:42 ../
-rw-rw-r--  1 ari ari  196 syys   28 21:41 bar
-rw-rw-r--  1 ari ari  148 syys   28 21:41 foo
total 16K

Mutta se ei toimi parametrien suhteen samalla tapaa kuin ls, koska jos komentaa

Koodia: [Valitse]
ari@ari-JL:~/tmp$ myfunction
ls: cannot access '': No such file or directory
ls: cannot access '': No such file or directory
a
ri@ari-JL:~/tmp$ myfunction *
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 bar
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 bar

ari@ari-JL:~/tmp$ myfunction ./*
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 ./bar
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 ./bar

Millä tavalla te siirtäisitte sen totalin tulosteen loppuun?
« Viimeksi muokattu: 19.10.23 - klo:21.05 kirjoittanut jarmala »
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #1 : 28.09.23 - klo:22.40 »
Ls:n tulosteessa tiedostojen yhteiskokohan tulostuu heti alkuun, mutta mukavampaa olisi, että se tulisi vasta lopussa, jolloin se jäisi ruudulla näkyviin.

Netistä löytyy pilvin pimein erilaisia vaihtoehtoja, mutta kaikkia ovat hieman kryptisiä. Päädyin kuitenkin seuraavaan:

Koodia: [Valitse]
myfunction() {     ls -alFh "$1";     ls -alFh "$1" | head -1; }

Mutta se ei toimi parametrien suhteen samalla tapaa kuin ls

Vaihda komennossa $1:n tilalle $@

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #2 : 29.09.23 - klo:02.11 »
Vaihda komennossa $1:n tilalle $@

Ok, kokeillaan:

Koodia: [Valitse]
ari@ari-JL:~/tmp$ myfunction() {     ls -alFh "$@";     ls -alFh "$@" | head -1; }

ari@ari-JL:~/tmp$ myfunction
total 16K
drwxrwxr-x  2 ari ari 4,0K syys   28 21:41 ./
drwxr-x--- 32 ari ari 4,0K syys   28 21:42 ../
-rw-rw-r--  1 ari ari  196 syys   28 21:41 bar
-rw-rw-r--  1 ari ari  148 syys   28 21:41 foo
total 16K

ari@ari-JL:~/tmp$ myfunction *
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 bar
-rw-rw-r-- 1 ari ari 148 syys   28 21:41 foo
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 bar

ari@ari-JL:~/tmp$ myfunction ./*
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 ./bar
-rw-rw-r-- 1 ari ari 148 syys   28 21:41 ./foo
-rw-rw-r-- 1 ari ari 196 syys   28 21:41 ./bar

OK, tuo auttaa pelkkkään myfunctioniin, mutta ei juuri muihin... No, on sekin hyvä, kiitos siitä. Tänks.
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #3 : 29.09.23 - klo:02.13 »
ari@ari-JL:~/tmp$ myfunction() {     ls -alFh "$@";     ls -alFh "$@" | head -1; }
OK, tuo auttaa pelkkkään myfunctioniin, mutta ei juuri muihin... No, on sekin hyvä, kiitos siitä. Tänks.

Ainiin, olisiko jotain keinoa, jotta hakemistoa ei tarvitsisi lukea kahteen kertaan?
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

SuperOscar

  • Käyttäjä
  • Viestejä: 4054
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #4 : 29.09.23 - klo:08.17 »
Ei siitä taida selvitä ilman AWKia tai vastaavaa. Tässä AWK-ratkaisu:

Koodia: [Valitse]
ls -alFh "$@" | gawk -f koe.awk
Missä koe.awk (suomenkieliselle ls-komentotulosteelle tuunattuna, vaihda ”yhteensä” sanaksi ”total” jos käytät lontoota):

Koodia: [Valitse]
/^yhteensä/ {
    total = $0
}

!/^yhteensä/ {
    print
}

END {
    print total
}
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #5 : 30.09.23 - klo:01.24 »
Ei siitä taida selvitä ilman AWKia tai vastaavaa. Tässä AWK-ratkaisu:

Jippii!
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

kamara

  • Käyttäjä
  • Viestejä: 3025
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #6 : 30.09.23 - klo:07.07 »
Jippii!

Tuosta kommentista voisi jopa päätellä ratkaisun kelpaavan, joten jos on näin, niin lisäisitkö ketjun ensimmäiseen säikeen otsikkoon "Ratkaistu:"-teksti.

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #7 : 19.10.23 - klo:04.19 »
Ei siitä taida selvitä ilman AWKia tai vastaavaa. Tässä AWK-ratkaisu:

Koodia: [Valitse]
ls -alFh "$@" | gawk -f koe.awk

Enpä kehtaa vielä merkitä tätä ratkaistuksi, koska tuo komento ei toimi, jos sen kohdistaa muihin hakemistoihin:

Koodia: [Valitse]
$ alias lg='ls -Fltrh "$@" | gawk -f ~/koe.awk'
ari@ari-JL:~$ lg
drwxrwxr-x 2 ari ari 4,0K tammi  28  2023 data/
drwxr-xr-x 2 ari ari 4,0K tammi  28  2023 Videot/
drwxr-xr-x 2 ari ari 4,0K tammi  28  2023 Musiikki/
drwxr-xr-x 2 ari ari 4,0K tammi  28  2023 Mallit/
drwxr-xr-x 2 ari ari 4,0K tammi  28  2023 Julkinen/
drwxr-xr-x 2 ari ari 4,0K helmi   7  2023 Työpöytä/
drwxr-xr-x 2 ari ari 4,0K helmi   7  2023 Kuvat/
-rw-rw-r-- 1 ari ari   78 syys   30 01:14 koe.awk
drwxrwxr-x 3 ari ari 4,0K loka   19 02:16 avi/
total 244K
ari@ari-JL:~$ lg avi/
gawk: warning: command line argument `avi/' is a directory: skipped

ari@ari-JL:~$ lg ./avi/
gawk: warning: command line argument `./avi/' is a directory: skipped

Eh? Mitä se gawkille kuuluu, mikä komentorivin parametri on? Käsittelisi vaan sen, mitä sille putkesta syötetään...
 
« Viimeksi muokattu: 19.10.23 - klo:04.30 kirjoittanut jarmala »
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #8 : 19.10.23 - klo:09.35 »
Koodia: [Valitse]
$ alias lg='ls -Fltrh "$@" | gawk -f ~/koe.awk'

Koodia: [Valitse]
ari@ari-JL:~$ lg avi/
gawk: warning: command line argument `avi/' is a directory: skipped

Eh? Mitä se gawkille kuuluu, mikä komentorivin parametri on? Käsittelisi vaan sen, mitä sille putkesta syötetään...

Muuttujat kuten "$@" eivät toimi aliaksen sisällä. Sen sijaan alias korvataan suoraan määrittelemälläsi tekstillä täydentämättä muuttujia, ja parametrit lisätään perään. Komennoksi tulee siis käytännössä:

Lainaus
ls -Fltrh "$@" | gawk -f ~/koe.awk avi/


Tee aliaksen sijaan funktio tai erillinen skripti, jonka voit tallentaa esimerkiksi .local/bin-hakemistoon. Tässä esimerkki .bashrc-tiedostoon sijoitettavasta funktiosta:

Koodia: [Valitse]
lg() {
    ls -Fltrh "$@" | gawk '/^yhteensä/ {total = $0} !/^yhteensä/ {print} END {print total}'
}

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #9 : 19.10.23 - klo:21.05 »
Tee aliaksen sijaan funktio tai erillinen skripti, jonka voit tallentaa esimerkiksi .local/bin-hakemistoon. Tässä esimerkki .bashrc-tiedostoon sijoitettavasta funktiosta:

Koodia: [Valitse]
lg() {
    ls -Fltrh "$@" | gawk '/^yhteensä/ {total = $0} !/^yhteensä/ {print} END {print total}'
}

No nyt se alkoi toimia, kun vielä hoksasi vaihtaa yhteensät totaleiksi.

Kiitos.
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #10 : 20.10.23 - klo:22.26 »
Koodia: [Valitse]
lg() {
    ls -Fltrh "$@" | gawk '/^yhteensä/ {total = $0} !/^yhteensä/ {print} END {print total}'
}

Perunpa puheeni: tuo toimii vain komentoriviltä ajettuna, mutta .bashrc:hen lisättynä se ei toimi edes buutin jälkeen: command not found... Mikäs tässä nyt vielä hangoittaa?
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #11 : 20.10.23 - klo:22.37 »
Perunpa puheeni: tuo toimii vain komentoriviltä ajettuna, mutta .bashrc:hen lisättynä se ei toimi edes buutin jälkeen: command not found... Mikäs tässä nyt vielä hangoittaa?

Ahaa, ne funktiot pitääkin lisätä tiedostoon /etc/bash.bashrc. Nyt alkaa näyttää lupaavammalta. Kokeilenpa tätä jonkin aikaa...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: Miten siirtää ls:n total tulosteen loppuun?
« Vastaus #12 : 21.10.23 - klo:01.33 »
Perunpa puheeni: tuo toimii vain komentoriviltä ajettuna, mutta .bashrc:hen lisättynä se ei toimi edes buutin jälkeen: command not found... Mikäs tässä nyt vielä hangoittaa?

Kuulostaa siltä, että käyttäjän .bashrc:ssä on jotain muuta vikaa, tai että sitä ei edes ladata .profile-tiedostossa.

Muutokset voi aina testata käynnistämällä uuden bash-istunnon:

Koodia: [Valitse]
bash
Sulje istunto Ctrl+D:llä tai exit-komennolla.