Portál AbcLinuxu, 2. srpna 2025 07:53


Dotaz: Výpis adresáře do sloupců

5.10.2016 18:31 Pavel
Výpis adresáře do sloupců
Přečteno: 1043×
Odpovědět | Admin
Přílohy:
Chtěl bych se zeptat, jakým příkazem provést výpis adresáře tak, aby každá položka (velikost souboru, mtime, Název souboru - nic víc nepotřebuji) byla zapsána do svého sloupce.

Zkoušel jsem si hrát s ls s různými parametry, ale když potom otevřu výsledný soubor.txt v programu gnumeric po sloupcích to správně rozdělené není.

Zkoušel jsem také výpis ls -l a potom pomocí cut vyříznout jednotlivé znaky, uložit do samostatných souborů a nakonec je spojit. Výsledek byl přesně ten co potřebuji, tj.každá hodnota ve svém sloupci, ale nešlo by to jednodušeji?

Díky.

Klidně ať jsou tam i další hodnoty (např.oprávnění r,rw...-ale nemusí tam být)


Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.10.2016 19:47 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obidva ukážkové výpisy sú zlé. Keď budeš mať pol roka starý súbor, pochopíš prečo. A skúsiť môžeš napríklad: find ./ -type f -printf "%Ad.%Am.%AY %AH:%Am %s %p\n"
wamba avatar 5.10.2016 22:31 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
nebo stat
stat --printf "%b\t %y\t %n\n" *
This would have been so hard to fix when you don't know that there is in fact an easy fix.
6.10.2016 07:32 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Příloha:
Díky za odpověď.

Takhle jsem to nějak potřeboval. Už nemusím sloupce "vyřezávat" ručně, ale napíšu mezi ně nějaký znak a oni se pak samy oddělí.

find "/media/root/Data/Zaznamy" -type f -printf "%Ad.%Am.%AY %AH:%AmQ %s Q%f\n"

Napsal jsem oddělovač znak Q a p jsem změnil na f, aby byl uvedený jen název nikoliv celá cesta.

Do přílohy dávám script, který jsem včera vytvořil, taky funguje.

6.10.2016 12:38 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Odelovač stĺpcov môžeš štandardne použiť buď TAB alebo bodkočiarku. V prípade bodkočiarky ti z toho vylezie súbor typu CSV.
Josef Kufner avatar 6.10.2016 17:20 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Nevyleze, není tam escapování nepřípustných znaků, jako je středník a uvozovka.
Hello world ! Segmentation fault (core dumped)
6.10.2016 20:02 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
$ find ./ -type f -printf "%Ad.%Am.%AY;%AH:%Am;%s;%p\n"
31.08.2016;18:08;4130090;./P8H67-M-PRO-ASUS-CG8250-8-0306.zip
Teraz neviem. Mám niečo pokazené že mi to funguje tak ako som popisoval, alebo to máš pokazené ty že ti to nefunguje tak ako to má fungovať?
Josef Kufner avatar 6.10.2016 20:09 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
touch 'a;b'
Zkus to znovu.
Hello world ! Segmentation fault (core dumped)
k3dAR avatar 6.10.2016 20:23 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
prece nebudeme troskarit ;)
touch '"zkus";"to";"znovu"'
porad nemam telo, ale uz mam hlavu... nobody
7.10.2016 08:36 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
V Lubuntu a Elementary OS mi to funguje dobře, ale v MMC Openelec se v terminálu zobrazí

find "/media/root/Data/Zaznamy" -type f -printf "%Ad.%Am.%AY %AH:%AmQ > %s Q%f\n" BusyBox v1.22.1 (2014-07-08 19:15:19 CEST) multi-call binary. find: unrecognized: -printf Usage: find [-HL] [PATH]... [OPTIONS] [ACTIONS] Search for files and perform actions on them. First failed action stops processing of current file. Defaults: PATH is current directory, action is '-print'BusyBox v1.22.1 (2014-07-08 19:15:19 CEST) multi-call binary.

Pokud před printf dám svislítko, zobrazí se

find "/media/root/Data/Zaznamy" -type f | printf "%Ad.%Am.%AY %AH:%AmQ %s Q%f\n" find: /media/root/Data/Zaznamy: No such file or directory sh: %Ad.%Am.%AY %AH:%AmQ %s Q%f\n: invalid format

Nevíte co s tím?

7.10.2016 08:51 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Busybox obsahuje okresanú funkcionalitu. Čo s tým? Buď to storrage centralizuješ, alebo vyzdielaš ten disk z openelec niekam kde funguje plná verzia programu find, alebo si ten plný find nahráš do toho openelec, alebo použiješ iný nástroj.

PS: tie parametre pre printf boli makrá programu find a nie makrá programu printf.
7.10.2016 16:18 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Příloha:
Ani jeden postup nepřipadá v úvahu, nahrát se do Openelec nedá nic (je jen pro čtení - chce se mi říct naštěstí). Při záznamu je spuštěný jen jeden PC, takže sdílení také nic. Zkoušel jsem i příkaz paste, ale ten je určený pro nahrání protokolů na web, takže v souboru dostanu jen adresu.

Napsal jsem script a použíl příkaz sed a join, zatím nevím zda je join v Openelec k dispozici, sed tam je, používám to ve scriptech. V Lubuntu to funguje.

Dal jsem to do přílohy.

k3dAR avatar 7.10.2016 21:35 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
pro informaci(nehledim jestli je to v danem pripade nejvhodnejsi reseni): OpenELEC ma (jako 99% vsech distro-instalacek, recovery/cokoliv-livecd) system v souboru co je v squashfs formatu, pomoci nastroju unsquashfs lze rozbalit, pak provest rucne upravy a pomoci mksquashfs pak upravene zabalit (oba nastroje jsou soucasti baliku: squashfs-tools)...
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 7.10.2016 21:36 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
tady je treba koukam nejakej script co ti s tim pomuze(resi i dalsi veci okolo): https://gist.github.com/queeup/2393819?
porad nemam telo, ale uz mam hlavu... nobody
7.10.2016 21:44 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Dovolím si tvrdiť, že použitie UnionFS bude v tomto prípade lepšie.
k3dAR avatar 8.10.2016 03:21 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
v dane situaci to lepsi neni...
ale pro tve info: UnionFS zkoncil s jadrem 2.6.x (resp. nebyla to soucast jadra) ;) takze by slo pouzit AUFS (Another Union File System) pokud by jadro OpenELEC melo pridane AUFS patche, pripadne OverlayFS pokud by jadro melo tu volbu zakompilovanou...
porad nemam telo, ale uz mam hlavu... nobody
8.10.2016 09:12 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Kedysi to malo. Ak to vyhodili, tak smola. Život ide ďalej.
10.10.2016 15:51 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Příloha:
Zkusil jsem rozbalit Openelec v ElementaryOS pomocí

unsquashfs -f "/root/Documents/SYSTEM"

z adresáře v ElementaryOS /usr/bin jsem zkopíroval soubory join a paste do adresáře /bin v Openelec

zase jsem Openelec zabalil

mksquashfs /root/squashfs-root /root/Documents/SYSTEM

V Openelec je možnost přidat do Grubu2 slovo debugging (ladění) a pomocí kláves CTRL+Alt+F3 - zpět CTRL+Alt+F1 -se dostat do terminálu na stejném PC (není nutné přes SSH).

Oba příkazy fungují (i když byly jenom obyčejně zkopírovány Ctrl+C a Ctrl+V) a příkaz paste už neodesílá logy na web jako původně, ale pracuje jako v jiných linuxech. Připojuji funkční script - spouští se v souboru /.config/autostart.sh

Díky za navedení dobrým směrem.

10.10.2016 20:52 Jiří Lisický | skóre: 31 | blog: JIL_blog | Olomouc
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Zkus použít awk, to by nemělo být ve verzi busybox moc osekané.
11.10.2016 18:02 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Příloha:
Dle doporučení jsem zkusil použít awk (příloha). Ale nemohu to dostat na jeden řádek, musím používat cyklus for. Potřeboval bych, aby u některých polí byla vytisknuta mezera jako tabelátor a u jiných ponechaná jako mezera. To se mi sice povedlo, ale potom byly všechny řádky výpisu filmů na jediném řádku. Já potřebuji mít na jednom řádku jen to, co je ve výpisu filmů na prvním řádku, na druhém co je na druhém .....

Jinak pro informaci:

V Openelec jsem nahradil stávající find souborem find z ElementaryOS a už jde provést výpis pomocí find (viz výše)

find ./ -type f -printf "%Ad.%Am.%AY %AH:%Am %s %p\n"

13.10.2016 09:22 Jiří Lisický | skóre: 31 | blog: JIL_blog | Olomouc
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Ten script je zbytečně komplikovaný ;-)

Hlavní problém s těmi soubory je ten, že názvy obsahují mezeru, pak se s tím v omezeném prostředí busyboxu blbě pracuje. V awk pak nejde jednoduše vypsat, že název souboru je $9, ale je to "$9 až poslední". To je pak trošku pracnější korektně vypsat - musel by tam být cyklus.

Napadlo mě ještě tohle:

ls -lrt|tail -n+2|cut -c 23-
19.10.2016 17:54 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Příloha:
Už se mi to povedlo napsat bez cyklu a s použitím jen toho, co je v Openelec (tedy není nutné nic přibalovat).

Ze začátku se mi to nechtělo dělit s příkazem cat po řádkách ani s uvozovkami (všechny řádky byl jeden celý dlouhý řádek) ani bez (každé slovo bylo na jednom řádku), ale pak jsem někde našel, že musí být na začátku scriptu výraz IFS=$'\n'. Tím se dělí řádky podle \n - to tam dodá awk. Nemusím už potom používat cyklus for. Řádky očísluji sedem (cat -n nejde v Openelec, nl taky ne), seřadím sortem podle třetího pole, parametrem -u odstraním duplicitní řádky, pomocí cut odříznu první pole s číslováním řádků a uložím.

Funguje přesně tak jak jsem chtěl, tj.každá hodnota ve svém sloupci (datum a čas, velikost v bytech a název).

Josef Kufner avatar 19.10.2016 21:48 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Na tohle už se hodí sáhnout po nějakém rozumném jazyce a netrápit se s shelem. Není tam třeba Python, PHP nebo Perl?
Hello world ! Segmentation fault (core dumped)
21.10.2016 07:44 Pavel
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Je tam Python 2.7.3. Ale jediné na co jsem se zmohl, je zobrazení hodnot ze svých scriptů na obrazovce po stisknutí klávesové zkratky. Klávesová zkratka spustí python script, který spustí script bash (rovnou spustit script bash klávesovou zkratkou nejde - zkoušeno i vyčteno na webu). Script bash příkazem sed nahradí v python scriptu slova např.Prvni radek proměnnou, Druhy radek další proměnnou atd... a zobrazí to na obrazovce. Zobrazují se takto např.hodnoty chyb na vstupu BER, hodnoty chyb na výstupu aj.hodnoty z protokolů.

I když to vypadá kostrbatě, funguje to bezvadně cca už skoro rok.

Jinak ten bash script na výpis ze složky funguje taky výborně, sloupce jsou odděleny a datum a čas je už ve formátu datum a čas (nikoliv text), takže se dá různě formátovat a řadit v Gnumeric nebo Excel aj....

Josef Kufner avatar 24.10.2016 00:00 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
Až to budeš nějak upravovat, přepiš to do čistého Pythonu. Bude tě to nejspíš stát trochu studia, ale ušetří ti to kopec práce později a otevře další možnosti.
Hello world ! Segmentation fault (core dumped)
6.10.2016 20:25 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
To je ošetrenie vstupu, eskejpovanie je trošku niečo iné. I keď sa tie významy čiastočne prelínajú. Ale, to v jeho prípade nebude problém keďže, možno si spomenieš, že aký oddelovač použil pred tým.
Josef Kufner avatar 7.10.2016 11:52 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Výpis adresáře do sloupců
To je ošetrenie vstupu, eskejpovanie je trošku niečo iné.
Ne.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.