Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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 :)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
použít awk v takovém případě je dost kanon na vrabce. Proč jsi nepoužila jen grep?
touchwood 27.03.2016 17:42
touchwood
dokonca iba egrep, ten pozná aj regex, aj prelezie adresáre, netreba ani find
čitateľ 27.03.2016 18:40
čitateľ
pokud jsem pochopil dobře, hledá pouze fyzické soubory.. edit: navíc egrep by všechny ty soubory pr…
touchwood 27.03.2016 19:16
touchwood
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…
Nikolinka 27.03.2016 19:39
Nikolinka
Píšu to z hlavy, takže si to případně zkontroluj a oprav: find . -type f | grep -E "*.txt" | grep…
touchwood 27.03.2016 20:23
touchwood
Z2nl Podle všeho by měl být výsledek 2, ale i tak moc děkuji :)
Nikolinka 27.03.2016 21:37
Nikolinka
no ale já vidím správně 3 výsledky. Pokud jsi chtěla excludovat řetězec "der2" a ne "der2$", musíš p… nový
touchwood 28.03.2016 11:44
touchwood
Mne ten príkaz funguje rovnako v skripte aj v príkazovom riadku. Nestačilo by niečo takéto? find -…
los 28.03.2016 11:04
los
jak vidím, zadání jsme každý pochopili trochu jinak. ;-) poslední
touchwood 28.03.2016 11:45
touchwood

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:

 find . -type f | grep -E "*.txt" | grep -v "der2\$" | rev | cut -d / -f 1 | rev | wc -l | tr -d " "

P.S.: pokud je ten exclusion string platný pouze pro jméno souboru, pak jej musíš přenést až za druhý "rev"

Zpět do poradny Odpovědět na původní otázku Nahoru