» Poradna » Ostatní

Z daneho mista vypsat pouze ty adresare, ktere maji podadresare - ale soubory ne

 |   |  Microsoft Windows 10 Firefox 126.0

Jak pomoci prikazoveho radku vypsat z daneho mista pouze ty adresare, ktere maji podadresare.

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 124.0.0.0

Nijak.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Macintosh OS X Chrome 124.0.0.0

To nejde ne?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

Proč by to nešlo?V bashi si prostě nechám vypsat adresáře do proměnné, pak mezi tím iteruji, udělám simple-check na to jestli je to adresář či soubopr, no a když adresář, tak vypíšu obsah...Pffff, tohle by se mělo probírat i na druhém stupni ZŠ.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Mozilla 126.0

Probírá, proto se taky na DÚ RadimP ptá.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

find <prohledavany_adresar> -mindepth 2 -type d

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Macintosh OS X AppleMAC-Safari 5.0

Powershellhttps://superuser.com/questions/321231/how-to-f... (gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullNameFullName------- C:\Scripts\Empty C:\Scripts\Empty Folder 2 C:\Scripts\Empty\Empty Subfolder C:\Scripts\New Folder\Empty Subfolder Three Levels Deep

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 124.0.0.0

(set -e; shopt -s {null,dot}glob; find . -type d -print0 | while IFS= read -d $'\0' -r dir; do dirs=0; for path in "${dir}/"*; do [[ -f "$path" ]] && continue 2; [[ -d "$path" ]] && ((++dirs)); done; ((dirs)) && printf '%s\n' "$dir"; done;)Ale do toho domácího úkolu samozřejmě nedávej one-liner; rozumně to zformátuj! Taky třeba použij funkce atd. Ať se v tom učitel vyzná:find_dirs_with_subdirs_without_files() (  set -euo pipefail  shopt -s {null,dot}glob  local -i dirs  local dir  find "$@" -type d -print0 |  while IFS= read -d $'\0' -r dir; do    ((dirs = 0)) || :    for path in "${dir}/"*; do      [[ -f "$path" ]] && continue 2      [[ -d "$path" ]] && ((++dirs))    done    ((dirs)) && printf '%s\n' "$dir"  done)Mimochodem, prázdný adresář podmíku splňuje nebo ne? Kdyby jo, dalo by se to výrazně zjednodušit.find_dirs_with_without_files() (  set -euo pipefail  shopt -s {null,dot}glob  local dir  find "$@" -type d -print0 |  while IFS= read -d $'\0' -r dir; do    for path in "${dir}/"*; do      [[ -f "$path" ]] && continue 2    done    printf '%s\n' "$dir"  done)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 124.0.0.0

Ještě snad možná:(a) přidat path do local, čistě jen pro pořádek, kdyby to náhodou byla {}-funkce.(b) vybodnout se na local, protože tohle je subshellová ()-funkce (výslovnost: p.i.č.a-funkce), ze které proměnná uniknout nemůže.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android AppleMAC-Safari 5.0

Jo až teď mi to dochází: To jako mělo být nerekurzivně? Jo ahaaa…Dobře, tak nic. Tak to asi bude výpočetka, učňák, první ročník.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

Složitěji by to nešlo? co je na find, -type d a -mindepth/maxdepth nepoužitelného?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 125.0.0.0

Tak laskavě uveď příklad. Seznam klíčových slov dovede napsat každý.Předveď nám, jak přesně pomocí find a pomocí jeho argumentů -maxdepth, -mindepth a filtru -type d najdeš (rekurzivně) právě takové adresáře, které mají nula souborů a aspoň jeden podadresář.Povídej, přeháněj, ale prosím s konkrétním spustitelným kódem, ne spouhými řečmi. 🤪

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

O tom, že nesmí být v adresáři soubory se v zadání nehovořilo... Zadání znělo na výpis adresářů, které mají v první úrvni podadresáře, což je findem řešitelné (s omezením, že vypíše i ty podadresáře na první úrovni, což řeší kolega dole).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 125.0.0.0

Ještě bych doplnil, že už i na tom učňáku ve „výpočetce“ v prvním ročníku se probírá, proč se nehodí spouštět oddělený proces (třeba find) znova na každý soubor / adresář / řádek výstupu.Takže pokud ten hvězdný „nápad“ měl být forknout další proces find na každém nalezeném adresáři, tak to je asi tak za tři mínus; lepší známkou něco takového ohodnotit nelze.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 124.0.0.0

No tak to bych asi prosel vsechny adresare a vypsal ty, ktere maji podadresare. Nenapsal jsi v cem to ma byt, tak tady je bash. Asi se to tady rozsype, takze radsi pastebin: https://pastebin.com/rDq4kzsXfor d in `ls -d */`; do if [[ -n `find $d -mindepth 1 -type d` ]] then echo $d; fidone

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 124.0.0.0

Neslo by k tem minusum taky napsat, proc je moje reseni spatne? Rad se necham poucit. Diky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

Já třeba nechápu přítomnost toho prvního for, když to find celé zvládne sám (mínus jsem nedal).Ale myslím, že tazatel tu má dost námětu na studium, tak ať si vybere sám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 124.0.0.0

"Já třeba nechápu přítomnost toho prvního for, když to find celé zvládne sám"To jsem si taky myslel, ale nevymyslel. Muzes to reseni co dava stejne vysledky napsat? Aniz by tam byly duplicity, nazvy podadresaru atd...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

Já neříkám, že je to špatně - jen se ptám, proč tam je/co to má odflitrovat. Jak to teď čtu - má to vypsat jen adresáře, které mají podadresáře, ale vypíše jen ty "hlavní" adresáře (tedy - bez podadresářů. find samozřejmě vypíše i ty podadresáře). Ok. Takto jsem zadání nepochopil a chtěl-li tazatel právě toto, pak OK.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 125.0

Jen bych možná k tomu internímu find dal prune nebo maxdepth (aby ty adresáře zbytečně dále neprolézal).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

Dekuji za odpoved, ale takto to dopadlo: #!/bin/bash>>>> for d in `ls -d */`;>> do>> if [[ -n `find $d -mindepth 1 -type d` ]]>> then>> echo $d;>> fi>> doneParserError:Line | 3 | for d in `ls -d */`; | ~ | Missing opening '(' after keyword 'for'.Ale jinak staci vypis jen tech "hlavnich" adresau, ktere maji podadresare. Vypis podadresaru neni treba. Dekuji.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

Tak si to oprav, né? Princip jak na to máš.. To jako fakt čekáš, že ti někdo zadarmo, jen tak, bude psát tvé domácí úkoly?Fakt by byla sranda, najít dle IP adresy tvého ISP a pokud jde o někoho lokálního, obepsat všechny základní školy z okolí, jak vychcaného Radima P tam mají.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 105.0.0.0

Bývaly doby, kde se tady DÚ, matematické olympiády apod. rovnou zamykaly.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 125.0.0.0

Asi záleží na tom, který z adminů má zrovna hlídku Nicméně máš pravdu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 125.0.0.0

Ja to napsal v bashi. Ty to evidentne poustis v necem jinem(windows powershell?).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 125.0.0.0

můžete si ta to sami ...sice neuvede explicitně os, ale v hlavičce má ikonu Windows ... a ptá se na příkazový řádek ...a vy mu tady píšete linux/bash skripty ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 125.0.0.0

Me to prislo jako skolni domaci ukol(jinak by treba napsal proc se o to snazi) a ze moji zkusenosti(netvrdim, ze to tak je vsude) se takovehle skriptovani probira na Linuxu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

No, pro ty, kteri mysli, ze se jedna o domaci ukol.Jsem 70 letej seniorNikdy jsem neabsolvoval skoleni k PC (ani k prikazovemu radku) jen s PC uz dele pracuji.Prikazovy radek jsem dal jako moznost, jina mne nenapadla.Mam 200 adresaru, s desitkami souboru a nektere adresare maji podadresare.A mozna mate pravdu a mel bych to zkusit sam - a zjistit, jake moznosti se nabizi.Ale presto dekuji za uvedene moznosti. RP

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

No protože ten microsoftí powershellí bazmek nikdo normální nepoužívá, že jo.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 125.0.0.0

Pokud tvůj intelekt nestačí na powershell, neznamená to, že ho nikdo nepoužívá. Používá a hojně.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 126.0

To tvrdíš ty.Realita je taková, že bash zná a používá nespočetně víc lidí, než CMD a powershell dohromady.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X Chrome 125.0.0.0

A odkdy ikona, která mimochodem nejde vidět na všech zařízeních, když sem koukáš, sovisí s dotazem.Jako že když teď u mě uvidíš ikonu jabka, tak se nemůžu zeptat na Windows, Linux nebo Android? Musím se ptát jen na MacOS? Navíc ta detekce není vždy správná, systém to ne vždy rozezná a ještě horší je prohlížeč, bude tady zase chrome a ten mám jen na androidu a jen proto že nejde odinstalovat :D

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 125.0.0.0

ta ikona je hint ...a asi když se budeš ptát na Android, tak to asi napíšeš ..a když si spojíš další skutečnosti typu:- zeptá se a neuvede os - ani možná neví, že jsou i jiné => má Windows- píše "příkazový řádek" - už to je dostatečné určení- Windows stále používá > 80% uživatelů, Linux < 2% (s MacOS to stále bude pod 10%) - Android apod. bych neuvažoval, podle typu dotazu se jedná o desktop ...za těchto okolností poskytnou Linux/Bash skript je nerozum nebo trolling(a argument, že i na Windows je Bash např. přes WSL neberu - je to BFU tazatel na poradně)

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 126.0

domaci ukoly mas resit sam a ne to nekomu zadavat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 121.0.0.0

Úžasné zadání pro umělou inteligenci. Netřeba chodit na Poradnu, pokud nechcete poradit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X Chrome 125.0.0.0

V tomhle souhlasím, když potřebuju nějakou drobnost tak je nejlepší napsat chatbotovi, nedávno jsem potřeboval maličkost, otevřít soubor a pokud řádek začíná nějakým znakem (případně uvozený whitespaces, tak ho vypustit a uložit soubor bez takových řádků.Pravda napsal jsem to svépomocí v pythonu který se chci trošku naučit, ale pak jsem ten kód podhodil botovi a zeptal se na lepší řešení a bylo, vrátil mi poloviční kód, daleko elegantnější :)

Souhlasím  |  Nesouhlasím  |  Odpovědět