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 :)

Předmět Autor Datum
použít awk v takovém případě je dost kanon na vrabce. Proč jsi nepoužila jen grep? nový
touchwood 27.03.2016 17:42
touchwood
To kvůli výstupu find commandu ./subfolder ./subfolder2/text.txt ./subfolder3/doc.txt Kdybych použi… nový
Nikolinka 27.03.2016 17:59
Nikolinka
to je mi jasné, ale proč to neuděláš elegantně pomocí příkazu cut? Stačí nastavit delimiter na slash… nový
touchwood 27.03.2016 19:14
touchwood
dokonca iba egrep, ten pozná aj regex, aj prelezie adresáre, netreba ani find nový
č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… nový
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… nový
Nikolinka 27.03.2016 19:39
Nikolinka
mozno ak si vylistujes plnce cesty adresarov aj suborov, tak ten regex by stacil aj v grepe algoritm… nový
čitateľ 27.03.2016 20:17
čitateľ
a takychto vselijakych prikladov si urcite najdes kopec http://stackoverflow.com/questions/15020000… nový
čitateľ 27.03.2016 20:21
čitateľ
Píšu to z hlavy, takže si to případně zkontroluj a oprav: find . -type f | grep -E "*.txt" | grep… nový
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 :) nový
Nikolinka 27.03.2016 21:37
Nikolinka
find . -type f | grep -E "*.txt" | grep -v "der2/$" | rev ti ukaze co? nový
Michal2 27.03.2016 21:48
Michal2
0Km0 :) nový
Nikolinka 27.03.2016 21:54
Nikolinka
Cize ignoruje grep -v. Vyskusaj zo srandy grep -v "der2\/". nový
Michal2 27.03.2016 22:39
Michal2
Qb1L Sice nevím, v čem mi to pomůže, ale proč ne nový
Nikolinka 27.03.2016 22:55
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 -… nový
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

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 :)

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