GNU veya FreeBSD veya NetBSD veya OpenBSD (ve muhtemelen diğerleri) ile awk:
find . -type f -exec awk '
/^#!.*python/{print FILENAME}
{nextfile}' {} +
Her dosyanın yalnızca ilk satırına bakar ve gerektiği kadar az sayıda çalışır awk.
Yukarıdaki nextfileifade standart değildir ancak GNU olanı da içeren birkaç uygulamada bulunur (muhtemelen kaynaklandığı yer).
Yukarıdaki kod diğer uygulamalarda da çalışıyor gibi görünse de, nextfileifade orada hiçbir şey yapmaz (ayarlanmamış bir nextfiledeğişkenden oluşan bir ifade olarak kabul edilir ), böylece tüm dosyalar tam olarak okunacak ve dosya adı her eşleşen satır için yazdırılacaktır.
Senin Eğer awkdestekleri FNR(POSIX awks gibi değil orijinal ama yapacak awk, böylece Solaris üzerinde /usr/xpg4/bin/awkdeğil /usr/bin/awkdeğil) nextfile, bunu yazabiliriz:
find . -type f -exec awk 'FNR == 1 && /^#!.*python/{print FILENAME}' {} +
Bu da yine awkde mümkün olduğunca az sayıda çalışır ancak dosyaları tam olarak okurdu.
Dosyaları tam olarak okumaktan kaçınmak için başka bir alternatif ve her biri ile çalışacak awkve dosya başına findbir tane çalıştırmak anlamına awkgelecektir:
find . -type f -exec awk '
/^#!.*python/{r=1};{exit}
END {exit(1-r)}' {} \; -print
grep -lBir eşleşme bulur bulmaz bir dosyayı okumayı bırakırken , eşleşmeyen dosyalar için dosyanın tamamını okuyacağını unutmayın. Ayrıca dosyaların ortasında eşleşmeler bulur, bu nedenle örneğinsharpython komut dosyaları içeren bir dosyada eşleşebilir .