
Bash - příkaz mimo script funguje, vně nikoli
Ahojte ráda bych se zeptala, píšu jeden skript, no setkala sem se s jistý problémem:
Mám příkaz find . -type f | awk -F/ '{for(k=1;k<=NR;k++)if ($k ~ /'"der2$"'/) next}1' | grep -E "*.txt" | wc -l | tr -d " "
Příkaz funguje správně, čili vyhledá a spočítá mi počet souborů končících .txt, které zároveň neodpovídají regexu "der2$". Má otázka zní, proč mi tento stejný příklad nefunguje ve scriptu - (ve scriptu jakoby vůbec nebral v potaz ten regex výraz).
Za každou pomoc budu moc ráda, předem děkuji :)
použít awk v takovém případě je dost kanon na vrabce. Proč jsi nepoužila jen grep?
To kvůli výstupu find commandu
./subfolder
./subfolder2/text.txt
./subfolder3/doc.txt
Kdybych použila pouze grep -v -E "der2$", vypsalo by mi to bohužel oba dva txt.soubory (regex by měl platit jak pro soubory, tak pro adresáře). Jestli máš ale lepší nápad, jak procházet určitou složkou a vyhazovat z konečného výpisu adresáře a soubory které sedí na daný regex (který není dán předem, může být jakýkoliv) tak budu moc ráda :)
to je mi jasné, ale proč to neuděláš elegantně pomocí příkazu cut? Stačí nastavit delimiter na slash (-d /), vybrat první (-f 1)a předtím a potom použít příkaz rev.
cut.html
rev.html
dokonca iba egrep, ten pozná aj regex, aj prelezie adresáre, netreba ani find
pokud jsem pochopil dobře, hledá pouze fyzické soubory..
edit: navíc egrep by všechny ty soubory procházel, což není dle zadání třeba.
Možná jsme se nepochopili a možná že jsem jen zapomněla uvést vše.
Stručně jde o skript který pročesává danou cestu a vypisuje velikosti souborů, přípony, adresáře a podobně, takový dirstat, dalo by se říct. Ale jakmile se při spuštění scriptu zadá jakýkoliv regex - soubory a adresáře, které mu odpovídají jsou jakoby z vyhledávání ignorovány. Při grepu či egrepu jsem měla problém s tím, že třeba daný adresář to z výpisu vyhodilo, ale soubory patřící pod něho už ne, což je špatně. Čili každé trochu elegantnější řešení by bylo suprový :)
mozno ak si vylistujes plnce cesty adresarov aj suborov, tak ten regex by stacil aj v grepe
algoritmus necham na teba :)
s awk nie som kamarat, ale cosi mi hovori, ze problem bude iba v uvodzovkach, v skripte to netreba tolko skatulkovat
a takychto vselijakych prikladov si urcite najdes kopec
http://stackoverflow.com/questions/15020000/embedd ing-awk-in-a-shell-script
http://stackoverflow.com/questions/28087461/awk-pr int-is-not-working-inside-bash-shell-script
Píšu to z hlavy, takže si to případně zkontroluj a oprav:
P.S.: pokud je ten exclusion string platný pouze pro jméno souboru, pak jej musíš přenést až za druhý "rev"
Z2nl
Podle všeho by měl být výsledek 2, ale i tak moc děkuji :)
ti ukaze co?
0Km0 :)
Cize ignoruje grep -v. Vyskusaj zo srandy grep -v "der2\/".
Qb1L
Sice nevím, v čem mi to pomůže, ale proč ne
no ale já vidím správně 3 výsledky. Pokud jsi chtěla excludovat řetězec "der2" a ne "der2$", musíš podle toho náležitě upravit výraz egrepu
Mne ten príkaz funguje rovnako v skripte aj v príkazovom riadku.
Nestačilo by niečo takéto?
jak vidím, zadání jsme každý pochopili trochu jinak.