cat
не нужно запоминать какие-либо части файла, которые он уже отправил, от ввода до вывода. Другими словами, он использует память O (1) .
head
также не нужно запоминать части файла, которые он уже отправил, ему нужно только их подсчитать. Более того, ему даже не нужно читать весь ввод; он может остановиться, когда достигнет количества строк, запрошенных при выводе.
Благодаря комментариям у меня есть две версии, которые работают. Обратите внимание, что я внес несколько изменений (чтобы найти только shebang в начале строки) и разрешить пробелы после shebang.
sudo bash -c 'for logf in $(find / -name "*.py"); do grep '^\\#\\!/usr/bin' "$logf"; done'
По какой-то причине, когда я пытался разрешить пустое пространство после shebang, я не мог заставить его работать.
Еще лучше (и проще)
sudo find / -name "*.py" -exec grep '^#! */usr/bin' {} \;