Portál AbcLinuxu, 23. dubna 2024 22:06


Dotaz: Jak přesměrovat -exec ve find

3.4.2009 10:22 ondra
Jak přesměrovat -exec ve find
Přečteno: 544×
Odpovědět | Admin

Ahoj.

Je možné nějak přesměrovat výstup příkazu volaného v -exec příkazu find? Potřebuji něco jako

find . -name 'nejaka maska' -exec sed -e 'neco' {} > vystup.sedu \;

Pokud vím, tak sedu nemůžu vnutit jméno výstupního souboru.

Díky.

 

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.4.2009 10:36 l4m4
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Odpovědět | | Sbalit | Link | Blokovat | Admin
find . -name 'nejaka maska' -print0 | xargs -0 sed -s -e 'neco' >vystup.sedu
3.4.2009 10:37 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že to nepotřebujete. Stačí
find . -name 'nejaka maska' -exec sed -e 'neco' {}  \; > vystup.sedu
Ale pokud byste to opravdu chtěl udělat, jak píšete (přesměrování uvnitř findu), spusťte v -exec nový shell. Něco nazpůsob
find . -name 'nejaka maska' -exec /bin/bash -c sed -e 'neco' {} > vystup.sedu  \;
3.4.2009 10:51 l4m4
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Jelikož {} se ve výrazu -exec může objevit právě jednou, a to už jsme vyplýtvali na argument sedu, je vystup.sedu konstanta výrazu. Takže ji lze vytknout a nespouštět zbytečné procesy...

Další rozdíl tohoto a mého řešení je, že mně to zapíše výstup zpracování všech nalezených souborů, toto akorát z toho posledního nalezeného...
3.4.2009 10:52 ondra
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find

Díky za rady. Asi jsem to špatně popsal. Potřebuji přesměrovat každý sed zvlášť. Něco jako

find . -name 'nejaka maska' -exec sed -e 'neco' {} > {}.out \;

 

3.4.2009 11:03 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Pokud jsou ty soubory rozumně pojmenované, nebyl by jednodušší normální while read cyklus... - něco jako
fine . ... | while read fname; do
   sed -e 'neco' "$fname" >"$fname.out";
done
I am always ready to learn although I do not always like to be taught. (W. Churchill)
3.4.2009 11:13 ondra
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find

Toto bude asi pro mě nejschůdnější. Díky moc.

David Watzke avatar 3.4.2009 14:27 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
V tomhle případě můžou bejt soubory pojmenovaný i docela nerozumně a stejně to bude fungovat.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.4.2009 14:57 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
i docela nerozumně
Ale spolehlivě to rozhodí znak nového řádku v názvu (a bohužel jsem zažil i takhle pojmenované soubory)...
I am always ready to learn although I do not always like to be taught. (W. Churchill)
David Watzke avatar 3.4.2009 15:23 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Aha, no tak taková zhovadilost pak už ovšem rozhodí ledacos.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.4.2009 15:49 l4m4
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Když už, tak už. find -print0 | xargs -0 prostě funguje. Nač vymýšlet blbosti...
David Watzke avatar 3.4.2009 15:53 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Jo, funguje, ale v tomhle případě je to celkem k ničemu, protože tím nevyřešíš to co chce tazatel.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.4.2009 11:08 l4m4
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Viz moji předchozí odpověď o jediném {}. Spuštěný příkaz musí tedy být něco, co vezme vstup a vytvoří automaticky jinak pojmenovaný výstup (a v tom případě nejlépe libovolné množství vstupních argumentů a použít xargs, ze stejného důvodu jako výše).

Pak ještě lze požít kluge typu

IFS=$'\n'; for x in $(find ...); do něco s $x; done
3.4.2009 11:21 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak přesměrovat -exec ve find
Tak si ty příkazy, které píšete za --exec, přepište do nějakého skriptu a z findu spouštějte ten.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.