GNU/Linux >> Znalost Linux >  >> Linux

Tisk názvu souboru spolu s Grep výsledky v Find -exec?

Mám program s názvem foo které chci provést u každého výsledku, který je nalezen pomocí find. Takže něco takového:

find . -name '*.o' -type f -exec foo {} ;

Chci grep výstup všech těchto vyvolání foo pro určitou strunu. Takže přidávám toto:

find . -name '*.o' -type f -exec foo {} ; | grep bar

Ale ztrácím původní informace o tom, z jakých souborů pocházejí shody. Zkusil jsem přidat -fprintf /dev/stderr '%pn' do find ale nyní to vypadá, že stdout je pryč, protože se nevytisknou žádné výsledky grep.

Jak mohu vytisknout každý název souboru na výstup a PAK nechat vytisknout výsledky grep odpovídající tomuto souboru?

Případně, pokud by existoval nějaký způsob, jak vytvořit -H argument grep práce, která by byla také v pořádku, ale jak je napsáno, nebude fungovat, protože jen předávám text ze stdin a grep nezná název souboru. Zkoušel jsem různá zaklínadla xargs , ale ani to se mi nepodařilo zprovoznit.

Přijatá odpověď:

Chcete-li získat každý název souboru vytištěný na výstup a PAK vytisknout výsledky grep odpovídající tomuto souboru, můžete zabalit -exec foo {} | grep potrubí ve skořápce:

find . -name '*.o' -type f -print -exec sh -c 'foo "$1" | grep "bar"' sh {} ;

Chcete-li vytvořit -H argument grep pracuje se standardním vstupem, pokud je vaše verze grep podporuje --label= možnost, kterou můžete udělat

find . -name '*.o' -type f -exec sh -c '
  foo "$1" | grep -H --label="$1" "bar"
' sh {} ;

nebo (pokud váš nález podporuje + víceargumentová alternativa k ; ):

find . -name '*.o' -type f -exec sh -c '
  for f; do foo "$f" | grep -H --label="$f" "bar"; done
' sh {} +

Linux
  1. Rekurzivní Grep vs Find / -type F -exec Grep {}; Co je efektivnější/rychlejší?

  2. Výsledky Du na souborovém systému jsou v rozporu s Df?

  3. Zachyťte skupiny pomocí Awk nebo Grep?

  1. find -exec cmd {} + vs | xargs

  2. Jak najít soubor s name=php.ini na linuxu pomocí příkazu grep

  3. Jak grep ps výstup s hlavičkami

  1. 3 tipy pro tisk s Linuxem

  2. Grep s logickými operátory?

  3. Vynechat rozšíření s Find?