
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?
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ý :)
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 :)
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.