find + tail + grep

Vancl Miroslav (QRIS) Miroslav.Vancl na qris.cz
Úterý Prosinec 28 11:54:07 CET 2004


> potreboval bych poradit jak smazat vsechny soubory, ktere maji na svem 
> poslednim radku urcity text. Zatim se mi je nepodarilo ani vypsat.
> 
> doposud jsem skoncil s necim takovym:
> 
> find . -exec "tail -n 1 {} | grep HLEDANY {}"  \;  -print
> 
> coz ale nefunguje :-(
> 
Pokud trváte na "jednoduchém" volání find, pak by to šlo nějak takhle:

find . -exec bash -c "tail -1 {} | grep -sq HLEDANY" \; -print

Samozřejmě musíte dát ještě pozor na případné spec. znaky v názvu souboru,
takže radši:
find . -exec bash -c "tail -1 \"{}\" | grep -sq HLEDANY" \; -print

Možná by byl vhodný i příkaz:
find . -exec awk '{l=$0}END{if (l~"HLEDANY") print FILENAME}' {} \;
protože se nevytváří tolik procesů. Samozřejmě se nabízejí i jiné
skriptovací jazyky (Perl,...).

Asi nejpřehlednější a tedy nejméně náchylné k problémům ale asi bude toto:
find . | while read f ;do tail -1 "$f" | grep -sq HLEDANY && echo "$f" ;done

M. Vancl


Další informace o konferenci Linux