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