ВОЗМОЖНЫЕ ИССЛЕДОВАНИЯ
В чем отличие между двумя следующими операторами?
$ find $HOME -name "*.c" -print | thead и $ find $HOME -name "*.c" -exec head {} \;
Они выглядят очень похоже, и они действительно похожи. Они обрабатывают одни и те же файлы и печатают одни и те же данные из каждого файла. Основное отличие в том, что строка, которая использует thead, печатает хорошее оформление вокруг имени файла, а чистая команда find печатает непрерывный поток текста так, что очень трудно определить, какой файл вы просматриваете.
В чем разница между двумя следующими операторами?
grep "$1" `find "$2" -print` и find "$2" -print | while read F do grep "$1" $F done
Они кажутся совершенно похожими, но существует различие в главном. Первый оператор - это один вызов команды grep. Аргументами являются множество имен файлов, поставляемых командой find. Если find сгенерирует слишком много имен файлов, то выполнение команды завершится. О том, что сгенерировано слишком много имен файлов, никакого предупреждения не выдается, но большое количество файлов фатально для grep. Поэтому мы должны рассматривать такой синтаксис как недопустимый в общем случае.
Второй оператор - это цикл. Он работает медленнее и вызывает grep много раз, что забирает много времени центрального процессора. Однако положительным моментом является то, что цикл получает данные по конвейеру, который фактически не имеет ограничений на число данных, которое он может иметь. Наша программа никогда неожиданно не прекратит выполнение.