Portál AbcLinuxu, 7. května 2025 14:43

Dotaz: vyhladavanie

7.1.2018 16:25 rimskij | skóre: 4
vyhladavanie
Přečteno: 469×
Odpovědět | Admin
Zdravim, ako by ste vyhladavali adresar v strome, v ktorom je viac ako 100 suborov nejakej pripony?

tzn. najdi adresar, v ktorom je viac ako 100 suborov typu *.jpg


Ř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

7.1.2018 16:35 jekub
Rozbalit Rozbalit vše Re: vyhladavanie
Odpovědět | | Sbalit | Link | Blokovat | Admin
find, ls, wc
8.1.2018 15:43 RM
Rozbalit Rozbalit vše Re: vyhladavanie
Perl umí globbing <*.jpg> stejně jako shell. Stačí mu tedy cpát na vstup adresáře (v proměnné $_), které bude expandovat a ukládat do anonymního pole @{[ ]}. Pole ve skalárním kontextu vrací velikost, která musí být > 100, aby se tiskl název adresáře:
find ~/Documents/ -type d -print0 | perl -0ne 'chomp; print "$_\n" if @{[<$_/*.jpg>]} > 100'
8.1.2018 16:29 RM
Rozbalit Rozbalit vše Re: vyhladavanie
Ještě chybí uvozovky <"$_/*.jpg">, bez kterých názvy adresářů s mezerou neprojdou.
8.1.2018 15:54 RM
Rozbalit Rozbalit vše Re: vyhladavanie
Oops, špatně umístěno?. Příště to bude lepší.
wamba avatar 7.1.2018 21:42 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: vyhladavanie
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takhle:
find /usr/share -type d|perl6 -ne '.say if .IO.dir( test => *.ends-with( ".jpg" ) ) > 100'
This would have been so hard to fix when you don't know that there is in fact an easy fix.
8.1.2018 13:48 2017
Rozbalit Rozbalit vše Re: vyhladavanie
Teda obdivuju lidi, co se umí takhle dřít s grepem. AWK je mi milejší pro tyhle účely (a navíc perl neumím :-( )
wamba avatar 8.1.2018 18:02 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: vyhladavanie
grep? Já zase než abych se dřel s AWK, tak je mi milejší Perl :-)
This would have been so hard to fix when you don't know that there is in fact an easy fix.
Řešení 1× (rimskij (tazatel))
8.1.2018 13:47 2017
Rozbalit Rozbalit vše Re: vyhladavanie
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná takhle. Najít obrázky, zjistit pomocí dirname jejich adresáře, seřadit je a spočítat výskyty. Případně samozřejmě je možný to nějakou podmínkou nechat vypsat podle počtu (hned mě napadlo to udělat grepem :-D )

find -name "*.php" -exec dirname {} \; | sort | uniq -c
8.1.2018 13:49 2017
Rozbalit Rozbalit vše Re: vyhladavanie
samozřejmě si změň koncovku, nemám na serveru moc obrázků :-)
8.1.2018 15:40 rimskij | skóre: 4
Rozbalit Rozbalit vše Re: vyhladavanie
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dakujem, velmi pekne, mate moj obdiv
8.1.2018 18:57 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: vyhladavanie
Len smutne podotknem že vyučujúci čo dávajú tento typ úloh na cviká sa tu zvyknú veľa krát mihnúť.
8.1.2018 19:29 jekub
Rozbalit Rozbalit vše Re: vyhladavanie
smutnější je, jak se každý snaží vyfiknout s hotovým řešením domácí úlohy
8.1.2018 20:15 RM
Rozbalit Rozbalit vše Re: vyhladavanie
Pro vyučujícího znalého Perlu nebude problém jednou otázkou prověřit, tvořil-li výraz autor opravdu sám, nebo jej někde obšlehl. Nevidím v tom tedy žádnej problém. Rozhodně lepší být v odpovědích přesnej, než napsat blbost typu 'find,ls,wc'.
k3dAR avatar 8.1.2018 21:30 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: vyhladavanie
souhlasim, az na konec... sice ja take radeji radim konkretne, nez obecne, ale rozhodne to nepovazuju za blbost, pokud tazatel nevim ceho se chytit (nechavam stranou zda je pro soukromej ci ukolovej ucel), tak kdyz mu nekdo napise ktere nastroje k tomu lze pouzit ma se ceho chytit a staci "jen" zjistit (z "man nastroj", z internetu, ...) jak je pouzit, zkombinovat...
porad nemam telo, ale uz mam hlavu... nobody
8.1.2018 22:36 RM
Rozbalit Rozbalit vše Re: vyhladavanie
Já si hlavně nedokážu představit dobré řešení s použití wc; to ls mi tam také nesedí. Když už, tak by šlo použít find | awk. Find s -printf '%h\n' bude tisknout názvy adresářů (zde uvedené volání dirname u GNU je zbytečné a pomalé) a ten awk bude počítat pomocí asociativního pole a při stovce vytiskne název adresáře. To je pak ještě o něco kratší než výraz s Perlem. Takže z mého pohledu, pokud mi autor nevysvětlí jak to myslel, je to 'find,ls,wc' blbost. Jinak souhlasím.
9.1.2018 00:21 rimskij | skóre: 4
Rozbalit Rozbalit vše Re: vyhladavanie
Zdravim,

myslim, ze akykolvek ucitel, je jedno, ci to je na strednej alebo vysokej, okamzite zisti, ci to ma z vlastnej hlavy, alebo nie. Staci jedna, dobre mierena otazka. Ak to ten ucitel nespravi, tak treba nadavat na oboch, nielen na leniveho studenta. Ja uz mam hodne davno po vysokej, skor sa snazim podobne veci pochopit. A uprimne: nejde mi to. I preto dakujem za kazdu radu a verte, nepytam sa po 3 minutach hladania odpovede.

Pekny vecer
k3dAR avatar 9.1.2018 02:03 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: vyhladavanie
ze neni ls potreba, nebo ze wc neni idealni, neznamena ze by to neslo, urcite to jde i hur ;-) treba:
find . -type d -exec sh -c '[ "$(ls "{}" | grep -i .jpg |wc -l)" -gt 100 ] && echo {}' \;
porad nemam telo, ale uz mam hlavu... nobody

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.