Che cosa conciso comando posso usare per trovare tutti i file che NON contengono una stringa di testo?
Ho provato questo (usando -v per invertire i parametri di grep) senza fortuna:
find . -exec grep -v -l shared.php {} ;
Qualcuno ha detto che avrebbe funzionato:
find . ! -exec grep -l shared.php {} ;
Ma non sembra funzionare per me.
Questa pagina ha questo esempio:
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
Ma è ingombrante e per niente conciso.
ps:so che grep -L *
lo farà, ma come posso usare il comando find in combinazione con grep per i file esclusi è quello che voglio davvero sapere.
pss:Inoltre non sono sicuro di come fare in modo che grep includa le sottodirectory con grep -L *
sintassi, ma voglio comunque sapere come usarlo con find
🙂
Risposta accettata:
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
O
find . -type f -exec grep -H -c 'shared.php' {} ; | grep 0$ | cut -d':' -f1
Qui stiamo calcolando il numero di righe corrispondenti (usando -c
) in un file se il conteggio è 0, allora è il file richiesto, quindi tagliamo la prima colonna, ovvero il nome del file dall'output.