Jak stručné mohu použít k nalezení všech souborů, které NEobsahují textový řetězec?
Zkoušel jsem to (pomocí -v k invertování parametrů grepu) bez úspěchu:
find . -exec grep -v -l shared.php {} ;
Někdo řekl, že to bude fungovat:
find . ! -exec grep -l shared.php {} ;
Ale zdá se, že to pro mě nefunguje.
Tato stránka má tento příklad:
find ./logs -size +1c > t._tmp
while read filename
do
grep -q "Process Complete" $filename
if [ $? -ne 0 ] ; then
echo $filename
fi
done < t._tmp
rm -f t_tmp
Ale to je těžkopádné a vůbec ne stručné.
ps:Vím, že grep -L *
to udělá, ale opravdu chci vědět, jak mohu použít příkaz find v kombinaci s grep k vyloučeným souborům.
pss:Také si nejsem jistý, jak zahrnout podadresáře grep s grep -L *
syntaxi, ale přesto chci vědět, jak ji používat s find
🙂
Přijatá odpověď:
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
NEBO
find . -type f -exec grep -H -c 'shared.php' {} ; | grep 0$ | cut -d':' -f1
Zde počítáme počet odpovídajících řádků (pomocí -c
) v souboru, pokud je počet 0, je to požadovaný soubor, takže z výstupu vyjmeme první sloupec, tj. název souboru.
Linux – Ztratím soubory, když vyprázdním mezipaměť (echo 3> /proc/sys/vm/drop_caches)?
Rozšíření souborů pro skripty Unix Shell?